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::signalboost::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);
    }
};