繁体   English   中英

为成员函数定义代理,该成员函数将成员函数指针作为模板参数

[英]Defining a proxy for a member function that takes a member function pointer as a template argument

我正在使用带有这样声明的类的第三方库:

template<typename Ret, typename... Args>
class Delegate<Ret(Args...)>
{
  // ...
};

它具有一些具有2个模板参数的模板成员函数。 第一个参数是类类型,第二个参数是成员函数指针:

template<typename Class, Ret(Class:: *Member)(Args...) const>
void connect(Class *instance);

template<typename Class, Ret(Class:: *Member)(Args...)>
void connect(Class *instance);

然后按以下方式使用:

class A
{
  void f(int)
  { }

  void foo()
  {
    Delegate<void(int)> d;
    d.connect<A, &A::f>(this);
  }
};

我想创建一个代理模板函数MyConnect ,该函数简单地将参数转发给Delegate's connect

class A
{
  void f(int)
  { }

  void foo()
  {
    MyConnect<A, &A::f>(this);
  }

  template <???>
  void MyConnect(???)
  {
    Delegate<void(int)> d;
    d.connect<???, ???>(this);
  } 
};

我无法执行此template <typename Class, void(Class::*Member)(int)>因为我不知道返回类型是什么,也不知道函数参数的数量

在C ++ 17中,您可以使用auto

template <typename C, auto m>
void MyConnect()
{
    Delegate<void(int)> d;
    d.connect<C, m>(this);
} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM