未命名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);