我希望能够在成员函数上模板化一个类,而无需重复成员函数的参数——即自动派生它们。如果我根据函数需要多少参数来命名类,我知道该怎么做,但我也想派生它。
像这样的东西,虽然这不起作用(至少在我的目标编译器 MSVC 2008 sp1 中):
class Foo {
void func0();
int func2(char *, float);
};
template<typename T> class Wrapper;
// specialize for zero-argument void func
template<typename Host, void (Host::*Func)()> class Wrapper<Func> : public Base {
... specialization goes here ...
};
// specialize for two-argument value func
template<typename Host, typename Ret, typename Arg0, typename Arg1, Ret (Host::*Func)(Arg0, Arg1)> class Wrapper<Func> : public Base {
... specialization goes here ...
};
通过“Base”,我可以多态地处理这些。最后,我想用它来为脚本语言创建一个简单的包装语法:
WrapClass<Bar> wrap(
MemberFunction<&Bar::func0>("func0") +
MemberFunction<&Bar::func2>("func2")
);
但是,这不起作用:专业化语法是错误的,因为您无法将函数指针匹配到类型名参数。