在C ++中展开模板参数的名称

时间:2015-01-28 11:29:52

标签: c++ templates

如果我有以下功能:

template <class T>
T myFunc(){
    return T_run();
}

因此,如果我调用myFunc<int>(),它应该在内部调用int_run()。 如果我调用myFunc<MyClass>(),它应该在内部调用MyClass_run()。

这需要通过用模板参数的名称替换T来扩展T_run。

这在C ++中是否可行?

谢谢,

佳日

2 个答案:

答案 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()

##运算符加入标记,因此它允许您在预处理期间构造函数名称。