C++ C++;模板类中的模板类

C++ C++;模板类中的模板类,c++,templates,c++11,delegates,C++,Templates,C++11,Delegates,我试图创建一个与C#one类似的委托类 我的目标如下 void say(){std::cout此问题与struct S{S;}。据我所知,你正在试图重新发明std::function。你的第一个例子——你的假设目标——是在使用Delegate=std::function添加模板后编译的;@chris你完全正确,我觉得很愚蠢,但感谢你指出这一点,我加入进来更新这个问题,看看有没有办法为了防止动态分配。@IgorTandetnik你是对的,但我只是想自己做,只是为了研究,然后我听到了关于std::b

我试图创建一个与C#one类似的委托类

我的目标如下


void say(){std::cout此问题与
struct S{S;}
。据我所知,你正在试图重新发明
std::function
。你的第一个例子——你的假设目标——是在使用Delegate=std::function添加
模板后编译的;
@chris你完全正确,我觉得很愚蠢,但感谢你指出这一点,我加入进来更新这个问题,看看有没有办法为了防止动态分配。@IgorTandetnik你是对的,但我只是想自己做,只是为了研究,然后我听到了关于std::bind和std::function的错误反馈……我要更新这个问题。lambda对象可以任意大(它可能通过值捕获了任意数量的任意对象)。一个特定的
LambdaDelegate
实例当然会有一些固定的大小。当然,大小为
N
的对象没有某种形式的动态分配就无法拥有另一个大小为
M>N
的对象的副本。这个问题与
struct s{s;}的问题相同
。据我所知,你正在试图重新发明
std::function
。你的第一个例子——你的假设目标——是在使用Delegate=std::function添加
模板后编译的;
@chris你完全正确,我觉得很愚蠢,但感谢你指出这一点,我加入进来更新这个问题,看看有没有办法为了防止动态分配。@IgorTandetnik你是对的,但我只是想自己做,只是为了研究,然后我听到了关于std::bind和std::function的错误反馈……我要更新这个问题。lambda对象可以任意大(它可能通过值捕获了任意数量的任意对象)。一个特定的
LambdaDelegate
实例当然会有一些固定的大小。当然,如果没有某种形式的动态分配,大小为
N
的对象将无法拥有另一个大小为
M>N
的对象的副本。
delegate4.cpp:73:21: error: field has incomplete type 'Delegate<void>'
            Delegate<R, P...> handler;
                              ^
delegate4.cpp:109:17: note: in instantiation of template class 'Delegate<void>' requested here
    Delegate<void> s(say);
                   ^
delegate4.cpp:18:38: note: definition of 'Delegate<void>' is not complete until the closing '}'
template <class R, class ...P> class Delegate : public Object
                                     ^
1 error generated.