面试题答案
一键面试设计思路
- 函数模板设计:首先定义通用的函数模板
processData
,用于处理各种类型组合的data1
和data2
,这里默认行为简单打印数据类型信息。 - 全特化设计:针对
data1
为MyClass1
且data2
为MyClass2
的情况进行全特化,在这个特化版本中实现复杂业务逻辑,如模拟数据库操作和网络通信。
代码实现
#include <iostream>
#include <string>
// 假设的自定义类
class MyClass1 {};
class MyClass2 {};
// 通用函数模板
template <typename T, typename U>
void processData(T data1, U data2) {
std::cout << "Default behavior for types: " << typeid(T).name() << " and " << typeid(U).name() << std::endl;
}
// 全特化版本,当data1是MyClass1且data2是MyClass2时
template <>
void processData<MyClass1, MyClass2>(MyClass1 data1, MyClass2 data2) {
// 模拟数据库操作
std::cout << "Simulating database operation..." << std::endl;
// 模拟网络通信
std::cout << "Simulating network communication..." << std::endl;
std::cout << "Complex business logic executed for MyClass1 and MyClass2" << std::endl;
}
测试代码
int main() {
int num1 = 10;
double num2 = 20.5;
MyClass1 obj1;
MyClass2 obj2;
processData(num1, num2);
processData(obj1, obj2);
return 0;
}
上述代码首先定义了通用的函数模板processData
处理一般类型组合。然后针对MyClass1
和MyClass2
的组合进行全特化,实现特定复杂业务逻辑。在main
函数中测试了通用版本和特化版本的processData
函数。