为什么成员函数不能用作模板参数?例如,我想像这样做:
struct Foo {
void Bar() { // do something
}
};
template <typename TOwner, void(&func)()>
void Call(TOwner *p) {
p->func();
}
int main() {
Foo a;
Call<Foo, Foo::Bar>(&a);
return 0;
}
我知道使用成员指针可以做类似的事情;虽然大多数时候还是很酷的,但我只是好奇为什么“应该”使用指针。
我看不出解释“p->func()”有任何歧义。为什么标准禁止我们将成员函数用作模板参数?即使根据我的编译器(VC++ 2013),静态成员函数也是不允许的。有人知道原因吗?或者,有没有一种方法可以在不损失指针解引用性能的情况下完成相同的事情?
谢谢。