在Visual Studio中使用boost 1.55时,以下代码会导致错误(在代码之后)
void foo(float a) {
a *= 2;
}
int main() {
boost::signals2::signal<void(float)> sig;
boost::function<void(float)> f = boost::bind(foo, _1);
sig.connect(f);
}
错误:1>...\dep\include\boost\bind\bind.hpp(192): error C2064: term does not evaluate to a function taking 0 arguments
我不知道,但我很高兴它不是一个带有0个参数的术语,因为它几乎与信号的想法相矛盾。怎么回事?
答案 0 :(得分:0)
我可以使用boost 1.53和VS2012编译并运行以下代码。
#include <iostream>
#include <boost/signals2.hpp>
void foo(float& a) {
a *= 2;
std::cout << a << std::endl;
}
int main()
{
boost::signals2::signal<void(float)> sig;
boost::function<void(float)> f = boost::bind(foo, _1);
sig.connect(f);
float i = 5;
std::cout << i << std::endl;
sig( i );
std::cout << i << std::endl;
std::cin >> i;
return 0;
}
结果5,10,5。我无法解释为什么它不是5,10,10 ......
答案 1 :(得分:0)
boost 1.55和visual studio 13的解决方案:
void foo(float a) {
a *= 2;
}
int main() {
boost::signals2::signal<void(float)> sig;
sig.connect(boost::signals2::signal<void (float)>::slot_type(foo, _1));
}