【发布时间】:2013-01-13 21:46:42
【问题描述】:
我有一个模板类 Delegate,它带有一个重载的 += 运算符,它使用类似于 C# 的委托。
// ... generalized version of the template omitted from code
template<typename... TArgs>
class Delegate<void, TArgs...>
{
private:
using Func = std::function<void(TArgs...)>;
std::vector<Func> funcs;
public:
template<typename T> Delegate& operator+=(T mFunc) { funcs.push_back(Func(mFunc)); return *this; }
void operator()(TArgs... mParams) { for (auto& f : funcs) f(mParams...); }
};
这就是我想要做的:
struct s
{
void test() { }
void run()
{
Delegate<void> d;
d += [] { /* do something */ ; };
d += test; // does not compile
}
};
有没有办法让d += test; 工作?
【问题讨论】:
-
它不是因为
test不应该返回smth而拒绝编译吗,因为它声明返回void? ideone.com/3sfQGU -
@Lol4t0:同意,我只是尝试编译它,但有一个空的
test... 有效 -
是的,我搞砸了 - 我在 stackOverflow 编辑器中编写了测试。编辑。
-
是的,您可以提供一个易于编译的示例来说明您在做什么。正如所指出的,由于
test中的return和大写Delegate的不同,它不会编译。 -
对不起,这只是一个例子。如果我删除 return 语句,我发现它仍然有效。我记得尝试过同样的事情但它没有编译 - 我认为这是因为我试图传递一个成员函数,而不是一个全局函数
标签: c# c++ function delegates std-function