不幸的是没有。模板机制只允许您使用类型的通用性,也就是创建可以使用多种类型的函数/对象,或者针对不同的输入类型具有稍微不同的实现,或者根据模板参数等形成返回类型。通常,模板元编程引入了所谓的静态多态性。这是一个compiler
阶段的功能(检出compilation stages),这意味着它是在所有名称都固定后完成的(即使编译器决定将其与int
参数一起使用,功能foo()
也将始终被调用为foo
)。
你试图实现的是进入proprocessor
阶段,其中可以使用preprocessor directives修改源代码。这是你可以使用宏来玩的时刻。为了您例如,你可以使用这样的事情:
#include <iostream>
using namespace std;
#define MySmartTemplate(StructName, Func1Name, Func1ArgType, Func2Name, Func2ArgType) \
struct StructName \
{ \
void Func1Name(Func1ArgType val) { cout << "func1" << endl; } \
void Func2Name(Func2ArgType val) { cout << "func2" << endl; } \
};
MySmartTemplate(MyStruct, foo, int, bar, double);
int main()
{
MyStruct myStruct;
myStruct.foo(1);
myStruct.bar(1);
}
Live demo
当然,你可以使用宏与模板,这将让您有更多的灵活性。
不,但可以使用预处理器宏。 – CoffeeandCode
简而言之,答案是否定的,这是不可能的,反正不是。 –