如果我有以下功能:
template <class T>
T myFunc(){
return T_run();
}
因此,如果我调用myFunc<int>()
,它应该在内部调用int_run()。
如果我调用myFunc<MyClass>()
,它应该在内部调用MyClass_run()。
这需要通过用模板参数的名称替换T来扩展T_run。
这在C ++中是否可行?
谢谢,
佳日
答案 0 :(得分:1)
您无法在c ++中执行任意函数名替换。你可以做的是在功能模板上提供专业化,如下所示:
template <class T>
T myFunc();
template <>
int myFunc<int>() { return 3; }
template <>
MyClass myFunc<MyClass>() { return MyClass(); }
void foo() {
int a = myFunc<int>();
MyClass b = myFunc<MyClass>();
}
答案 1 :(得分:0)
你不能使用模板来做到这一点,但如果你真的必须用宏来实现同样的目的:
#define myFunc(T) T##_run()
myFunc(int); // calls int_run()
myFunc(MyClass); // calls MyClass_run()
##
运算符加入标记,因此它允许您在预处理期间构造函数名称。