C++ C++;委托模板
如果我有下面的设置,请举个例子。我的问题是让模板的connect函数工作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:
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
是私有的,ClassB
定义后缺少分号。。。
#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);
}