c++11 信号是否等同于 boost.signals
Are c++11 signals equivalent to boost.signals
据我了解,许多 boost 库都包含在 c++11 标准中。将 boost::
更改为 std::
后,我设法使用 c++11 编译器编译了它们。我在编译包含 boost::signals
的代码时遇到问题。
#include <iostream>
#include <functional>
#include <csignal>
void func()
{
std::cout << "Hello world" << std::endl;
}
int main()
{
std::signal<void()> s;
s.connect(func);
s();
}
我收到这个错误:
prog.cpp: In function ‘int main()’:
prog.cpp:12:19: error: invalid operands of types ‘void (*(int, __sighandler_t)throw ())(int) {aka void (*(int, void (*)(int))throw ())(int)}’ and ‘void’ to binary ‘operator<’
std::signal<void()> s;
^
prog.cpp:12:22: error: ‘s’ was not declared in this scope
std::signal<void()> s;
std::signal
不等于boost::signal
吗?
std::signal连模板都不是,不能写std::signal<type>;
http://en.cppreference.com/w/cpp/utility/program/signal
它们是完全不同的东西。 boost::signal 是一个信号槽框架,而 std::signal(它来自 C,而不是来自 C++11)是一个设置 OS 信号处理程序的函数。
std::signal
与 boost::signal
无关。但是不使用boost
做成boost::signal
这样的东西并不难
template <typename... T>
struct signal{
typedef std::function<T...> function_type;
typedef std::vector<function_type> container_type;
container_type _slots;
template <typename... Args>
void operator()(Args... args){
for(function_type f: _slots){
f(args...);
}
}
void connect(function_type slot){
_slots.push_back(slot);
}
};
据我了解,许多 boost 库都包含在 c++11 标准中。将 boost::
更改为 std::
后,我设法使用 c++11 编译器编译了它们。我在编译包含 boost::signals
的代码时遇到问题。
#include <iostream>
#include <functional>
#include <csignal>
void func()
{
std::cout << "Hello world" << std::endl;
}
int main()
{
std::signal<void()> s;
s.connect(func);
s();
}
我收到这个错误:
prog.cpp: In function ‘int main()’:
prog.cpp:12:19: error: invalid operands of types ‘void (*(int, __sighandler_t)throw ())(int) {aka void (*(int, void (*)(int))throw ())(int)}’ and ‘void’ to binary ‘operator<’
std::signal<void()> s;
^
prog.cpp:12:22: error: ‘s’ was not declared in this scope
std::signal<void()> s;
std::signal
不等于boost::signal
吗?
std::signal连模板都不是,不能写std::signal<type>;
http://en.cppreference.com/w/cpp/utility/program/signal
它们是完全不同的东西。 boost::signal 是一个信号槽框架,而 std::signal(它来自 C,而不是来自 C++11)是一个设置 OS 信号处理程序的函数。
std::signal
与 boost::signal
无关。但是不使用boost
boost::signal
这样的东西并不难
template <typename... T>
struct signal{
typedef std::function<T...> function_type;
typedef std::vector<function_type> container_type;
container_type _slots;
template <typename... Args>
void operator()(Args... args){
for(function_type f: _slots){
f(args...);
}
}
void connect(function_type slot){
_slots.push_back(slot);
}
};