未命名class类型的方法函数指针模板
Method function pointer template without naming class type
考虑这个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);
编辑
本题仅针对模板函数。继承和其他基于 class 的解决方案不适合这种情况。 (在我的项目中,使用包装器对象比输入额外的名称更糟糕。)
在 C++17 中可以使用 auto
template<auto Method, typename T>
void circuitousInvoke(T* callee) {
(callee->*Method)();
}
然后
A a;
circuitousInvoke<&A::test>(&a);
考虑这个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);
编辑
本题仅针对模板函数。继承和其他基于 class 的解决方案不适合这种情况。 (在我的项目中,使用包装器对象比输入额外的名称更糟糕。)
在 C++17 中可以使用 auto
template<auto Method, typename T>
void circuitousInvoke(T* callee) {
(callee->*Method)();
}
然后
A a;
circuitousInvoke<&A::test>(&a);