MST

星途 面试题库

面试题:C++ 函数模板全特化与复杂场景应用

设计一个函数模板template <typename T, typename U> void processData(T data1, U data2),它的功能是根据data1和data2的类型,决定不同的处理逻辑。假设data1类型可能是自定义类MyClass1,data2类型可能是自定义类MyClass2,或者它们可能是内置类型。对该函数模板进行全特化,使得当data1是MyClass1且data2是MyClass2时,执行复杂的业务逻辑(例如涉及数据库操作、网络通信模拟等,可自行设计具体逻辑),同时保证在其他类型组合下也有合理的默认行为。请完整实现该函数模板及其全特化版本,并阐述设计思路。
15.7万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

设计思路

  1. 函数模板设计:首先定义通用的函数模板processData,用于处理各种类型组合的data1data2,这里默认行为简单打印数据类型信息。
  2. 全特化设计:针对data1MyClass1data2MyClass2的情况进行全特化,在这个特化版本中实现复杂业务逻辑,如模拟数据库操作和网络通信。

代码实现

#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处理一般类型组合。然后针对MyClass1MyClass2的组合进行全特化,实现特定复杂业务逻辑。在main函数中测试了通用版本和特化版本的processData函数。