想要实现类似信号模板的提升,它以函数类型为参数

时间:2012-10-18 05:36:59

标签: c++

对不起,如果这个问题很基础。我无法找到一个简单的模板实现示例代码 Boost.signals 像:

 boost::signal<void ()> sig;

我所知道的是以下内容:

 template <class T>
  TemplateClass {
      T t;
   };


   TemplateClass<int> a;

请提供一些指示?

2 个答案:

答案 0 :(得分:0)

不确定问题是什么,但带有提升信号的是,您创建了一个发布者/订阅者系统,以便您可以将事件发送给感兴趣的各方。

声明-boost :: signal sig; - 是一个简单的模板,如下面列出的那个,但类型是函数签名(不要与函数指针混淆)。然后,订阅者可以使用该签名提供回调。

这是一个简单的hello world示例:

http://www.boost.org/doc/libs/1_51_0/doc/html/signals/tutorial.html#id3193274

希望有所帮助

答案 1 :(得分:0)

你想要如何创建boost :: signals2 :: signal之类的模板参数? 实施示例如下:

#include <tuple>

template <class Signature>
class TemplateClass; // declaration only

template <class R, class... Args>
class TemplateClass<R(Args...)> { // partial specialization as function like signature
public:
    typedef R result_type;
    typedef std::tuple<Args...> arg_types;

    R operator()(const Args&... args)
    {
        return invoke_function(args...);
    }
};

int main()
{
    TemplateClass<void(int, double)> x;
    x(1, 3.14);
}