0

对不起,如果这个问题非常有根据。我无法以某种方式将模板实现的一个简单示例代码视为Boost.signals ,例如:

 boost::signal<void ()> sig;

我所知道的是以下内容:

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


   TemplateClass<int> a;

请提供一些关于它的指针?

4

2 回答 2

0

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

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

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

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

希望有帮助

于 2012-10-18T06:46:59.133 回答
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);
}
于 2012-10-19T01:25:30.533 回答