以下是一个具体的解决方法,通过使用lambda表达式来实现按照要求部分特化类模板。
#include
template
struct MyStruct {
void print(T value) {
std::cout << "General template: " << value << std::endl;
}
};
template <>
struct MyStruct {
void print(int value) {
std::cout << "Specialized template for int: " << value << std::endl;
}
};
template
void printValue(T value) {
MyStruct obj;
obj.print(value);
}
int main() {
printValue(10); // 调用特化模板
printValue("Hello World"); // 调用通用模板
// 使用lambda表达式来创建一个自定义的打印函数
auto customPrint = [](auto value) {
MyStruct obj;
obj.print(value);
};
customPrint(3.14); // 调用通用模板
customPrint("Lambda example"); // 调用通用模板
customPrint(100); // 调用特化模板
return 0;
}
在上述代码中,我们首先定义了一个通用的类模板MyStruct
,以及一个特化的类模板MyStruct
,用于处理int类型的特殊情况。然后,我们定义了一个打印函数printValue
,该函数根据传入的参数类型选择使用通用模板或特化模板来进行打印。
接下来,我们使用lambda表达式创建了一个自定义的打印函数customPrint
,该函数也可以根据传入的参数类型选择使用通用模板或特化模板来进行打印。
最后,在主函数中分别调用了printValue
函数和customPrint
函数来进行测试,可以看到根据不同的参数类型,正确地选择了通用模板或特化模板进行打印。