考虑这个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);
由于参数callee
中的circuitousInvoke已经知道类型T,有没有办法避免输入这种类型?
circuitousInvoke<&A::test>(new A);
此问题仅涉及模板功能。在这种情况下,继承和其他基于类的解决方案不适用。 (在我的项目中使用包装器对象会比输入其他名称更糟糕。)
答案 0 :(得分:8)
在带有auto
template<auto Method, typename T>
void circuitousInvoke(T* callee) {
(callee->*Method)();
}
然后
A a;
circuitousInvoke<&A::test>(&a);