【发布时间】:2010-10-01 08:39:25
【问题描述】:
我正在为一个研究项目开发基于事件的架构。系统目前使用 Qt 信号,但我们正试图远离 Qt,所以我需要一些几乎与 Qt 事件循环和跨线程信号一样工作的东西。
可能与我更好的判断相反,我选择使用可变参数模板来创建一个通用事件,该事件将用于在目标线程中执行回调。
template<typename dest, typename... args>
class Event {
public:
Event(dest* d, void(dest::*func)(args...), args... a)
: d(d), func(func), pass(a...) { }
virtual void perform() {
(d->*func)(pass...);
}
protected:
dest* d;
void(dest::*func)(args...);
args... pass;
};
我没有找到任何表明这是否可行的信息。但是,我很难相信它不是。鉴于此,我想知道是否有办法做这样的事情,如果没有,为什么?另外,如果有人有更好的方法,我会欢迎这个建议。
【问题讨论】:
-
回答你的第一个问题,你尝试编译这个吗?
-
如果你想要一些与 Qt 信号非常相似但不使用 Qt 的东西,你可以尝试Boost.Signals(或者查看代码以获取一些灵感,但他们不使用 C++0x然而)。
-
是的,我确实尝试过编译它,唯一有问题的部分是 args... 在底部传递。
-
-1 几乎一个月后没有宣布明确的赢家(Maister 答案是迄今为止我发现的可变参数模板最明确的例子)