C++ C++;委托模板

C++ C++;委托模板,c++,templates,delegates,variadic-templates,pointer-to-member,C++,Templates,Delegates,Variadic Templates,Pointer To Member,如果我有下面的设置,请举个例子。我的问题是让模板的connect函数工作 class A { public: Delegate<void(int)> test; }; class B { public: void test(int a) { std::cout << a; }; }; 您的connect() template<typename T> void connect (T * t, R(T:

如果我有下面的设置,请举个例子。我的问题是让模板的connect函数工作

class A
{
public:
   Delegate<void(int)> test;
};


class B
{
public:
    void test(int a)
    {
       std::cout << a;
    };

};

您的
connect()

  template<typename T>
  void connect (T * t, R(T::*method)(Args...) ) 
   { mFunction = [=](Args ... as){ (t->*method)(as...); }; }
模板
无效连接(T*T,R(T:::*方法)(参数…)
{mFunction=[=](Args…as){(t->*方法)(as…;};}
下面是一个完整的编译示例

#include <iostream>
#include <functional>

template <typename>
class Delegate;

template <typename R, typename... Args>
class Delegate<R(Args...)>
 {
   public:
      template<typename T>
      void connect (T * t, R(T::*method)(Args...) ) 
       { mFunction = [=](Args ... as){ (t->*method)(as...); }; }

      R operator() (Args... args)
       { return mFunction(args...); }

   protected:
      std::function<R(Args...)> mFunction;
 };

class A
 { public: Delegate<void(int)> test; };

class B
 { public: void test (int a) { std::cout << a; }; };

int main()
 {
   A a;
   B b;

   a.test.connect(&b, &B::test);

   a.test(42);
 }
#包括
#包括
模板
班级代表;
模板
类委托
{
公众:
模板
无效连接(T*T,R(T:::*方法)(参数…)
{mFunction=[=](Args…as){(t->*方法)(as…;};}
R运算符()(Args…Args)
{返回mFunction(args…);}
受保护的:
std::函数mFunction;
};
甲级
{public:Delegate test;};
B类
{public:void test(int a){std::cout请提供包含错误消息的a。您的代码中有许多错误,例如
Class a
B::test
是私有的,Class
B
定义后缺少分号。。。
#include <iostream>
#include <functional>

template <typename>
class Delegate;

template <typename R, typename... Args>
class Delegate<R(Args...)>
 {
   public:
      template<typename T>
      void connect (T * t, R(T::*method)(Args...) ) 
       { mFunction = [=](Args ... as){ (t->*method)(as...); }; }

      R operator() (Args... args)
       { return mFunction(args...); }

   protected:
      std::function<R(Args...)> mFunction;
 };

class A
 { public: Delegate<void(int)> test; };

class B
 { public: void test (int a) { std::cout << a; }; };

int main()
 {
   A a;
   B b;

   a.test.connect(&b, &B::test);

   a.test(42);
 }