【发布时间】:2014-01-30 06:47:13
【问题描述】:
大家好,我最近一直在研究增强信号,因为我想从我自己的自定义代码切换到它来处理信号通知。我从这里编译第一个示例时遇到了问题:http://www.boost.org/doc/libs/1_53_0/doc/html/signals2/tutorial.html,这是示例源代码:
struct HelloWorld
{
void operator()() const
{
std::cout << "Hello, World!" << std::endl;
}
};
// Signal with no arguments and a void return value
boost::signals2::signal<void ()> sig;
// Connect a HelloWorld slot
HelloWorld hello;
sig.connect(hello);
// Call all of the slots
sig();
尝试编译时出现的问题是:clang++ -std=c++11 signals2example.cpp 是这里的错误:
error: no matching function for call to 'get'
func(std::get<indices>(args)...);
为了缩小问题的范围,我注释掉了所有的行,直到我弄清楚是哪一行引起的,它只是简单地说“sig();”的那一行。并且问题似乎与用于元组或其他东西的 std::get 函数有关。关于 boost::signal2 和 clang++ 冲突的在线帖子并不多。我还应该注意到,g++ 编译这个文档完全没有抱怨。
【问题讨论】:
-
没有看到实际代码我只能猜测,但我的猜测是,在示例中
indices名称是一个变量而不是编译时常量。模板是仅编译时的构造,因此所有非类型模板参数都必须是编译时常量。不过,Boost 会犯这样的错误似乎很奇怪。 -
@JoachimPileborg 这个库的性能也不是很好;我对质量如此低的水平并不感到惊讶,我曾经尝试过那个库,我看不出有人如何以及为什么使用它,实际上没有意义。
标签: c++ g++ clang++ boost-signals2