Mfc 通用';成员函数';其他成员函数的包装器?

Mfc 通用';成员函数';其他成员函数的包装器?,mfc,c++,templates,c++17,variadic-templates,member-function-pointers,Mfc,C++,Templates,C++17,Variadic Templates,Member Function Pointers,我有一个接口,在这里我必须传递成员函数指针,该指针是静态强制转换到基指针的,在我们的背后存储为空指针和调用类型() 我创建了一个包装器,它可以进行一些异常处理(非常简单的try/catch-to-catch std::runtime_-error),因为在每个用户回调中都会维护这一点,而且很繁琐,容易出错 到目前为止,以下包装实际上运行得相当好(其思想是直接获取成员函数指针作为值模板参数-本质上为每个回调函数提供一个成员函数包装): class MyClass:public CWnd/*示例*/

我有一个接口,在这里我必须传递成员函数指针,该指针是静态强制转换到基指针的,在我们的背后存储为空指针和调用类型()

我创建了一个包装器,它可以进行一些异常处理(非常简单的try/catch-to-catch std::runtime_-error),因为在每个用户回调中都会维护这一点,而且很繁琐,容易出错

到目前为止,以下包装实际上运行得相当好(其思想是直接获取成员函数指针作为值模板参数-本质上为每个回调函数提供一个成员函数包装):

class MyClass:public CWnd/*示例*/{
公众:
模板
无效调度(CCmdUI*pCmdUI){
试一试{
(本->*f)(pCmdUI);
}
捕获(标准::运行时错误&e){
//处理错误
}
}
};
但是为了避免每种类型的调用都有一个显式重载,是否可以将参数列表参数化

图(请注意,这不起作用):

模板
无效调度(Args…Args){

因为您使用的是C++17,所以可以对模板参数使用
auto

模板

如果需要检查
f
是否是指向该类的成员函数的指针,则可以在调用
(this->*f)(args…
之前使用一些
static\u assert
语句


还有一件小事情:如果您使用右值语义,那么接收
Args&&
并使用
std::forward

也是一个好主意。请提供一个,如果人们可以将代码粘贴到编译器中并对其进行处理,您就更有可能得到响应。使用
Args&&…Args
似乎无法解决过载问题,但是,
Args…Args
class MyClass : public CWnd/*example*/{
public:
      template<void (MyClass::*f)(CCmdUI*)>
      void Dispatch(CCmdUI* pCmdUI) {
        try {
          (this->*f)(pCmdUI);
        }
        catch (std::runtime_error& e) {
          //handle error
        }
      }
};
      template<void (MyClass::*f)(Args...)>
      void Dispatch(Args... args) {