【发布时间】:2017-11-01 16:27:49
【问题描述】:
考虑这个template函数,调用class T对象的方法。
template<class T, void (T::*Method)()>
void circuitousInvoke(T* callee) {
(callee->*Method)();
}
例子:
struct A {
void test() {};
}
circuitousInvoke<A, &A::test>(new A);
由于类型 T 已经被参数 callee 知道,所以有没有办法避免键入这种类型?
circuitousInvoke<&A::test>(new A);
编辑
这个问题只涉及模板函数。在这种情况下,继承和其他基于类的解决方案不适合。 (在我的项目中,使用包装对象比输入额外的名称更糟糕。)
【问题讨论】:
-
这是如何在 c++11 中完成的:stackoverflow.com/a/28892710/4117728
-
@tobi303: 不是重复的,因为他没有有一个成员函数类型,他有一个成员函数指针...... C++14 及更低版本中的模板参数,除非其类型已命名。
标签: c++ templates member-function-pointers syntactic-sugar