2015-01-02 1 views
-4

많은 boost 라이브러리가 C++ 11 standart에 포함되어 있습니다. boost::std::으로 변경 한 후 C++ 11 컴파일러를 사용하여 컴파일했습니다. boost::signals이 들어있는이 코드를 컴파일하는 데 문제가 있습니다.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; 

boost::signal에 해당 std::signal되지 않습니다?

+1

이것은 [cargo cult] (http://en.wikipedia.org/wiki/Cargo_cult_programming)를 많이 상기시켜줍니다. 시스템이 헤더 파일을 암호화합니까? 또는 [cppreference] (http://en.cppreference.com/w/cpp/utility/program/signal)를 차단 하시겠습니까? – sehe

+0

'boost :: signals'은 C++ 11에 포함되어 있고 다른 boost 라이브러리와의 유사성 때문에'std :: signal'이라는 이름을 가져야한다고 생각했습니다. – Ashot

답변

6

표준 : 신호도 서식하지 않습니다, 당신은 그들이 완전히 다른 것들입니다 std::signal<type>;

http://en.cppreference.com/w/cpp/utility/program/signal

을 쓸 수 없습니다. boost :: signal은 신호 슬롯 프레임 워크이며, std :: signal (C++이 아닌 C++ 11)은 OS 신호 처리기를 설정하는 함수입니다.

+0

그런 식으로 구현되는 이유는 무엇입니까? C++ 11 컴파일러에서 boost.singals를 어떻게 사용할 수 있습니까? – Ashot

+4

그냥 계속 boost :: signals을 사용하십시오. – nkdm

+0

확인해 주셔서 감사합니다. – Ashot