2014-01-30 4 views
0

안녕하세요, 저는 신호 알림 처리를위한 자체 커스텀 코드에서 전환하고 싶기 때문에 부스트 신호를 최근에 들여다 보았습니다. 여기에서 첫 번째 예제를 컴파일 문제로 실행 :clang ++는 부스트 시그널 2의 첫번째 예제를 만들지 않을 것입니다.

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(); 

문제는이 컴파일을 시도에서 발생 : 그 소리 ++ -std = C++ 11 signals2example.cpp을 http://www.boost.org/doc/libs/1_53_0/doc/html/signals2/tutorial.html, 여기 예제 소스 코드 여기에이 오류입니다 : "SIG();"

error: no matching function for call to 'get' 
      func(std::get<indices>(args)...); 

내가 하나를 일으킨 알아 냈 때까지 모든 라인에서 주석 문제를 좁히려는, 단순히 선을 말한다하였습니다 문제는 튜플이나 뭔가를위한 std :: get 함수와 관련이있는 것처럼 보입니다. boost :: signal2와 clang ++ clashing과 관련하여 온라인에서 유용한 게시물이 많지 않습니다. 또한 g ++은 불만없이이 문서를 컴파일합니다.

+0

내가 추측 할 수있는 실제 코드를 보지 않고도 내 생각 엔이 예제에서'indices' 이름은 변수이며 컴파일 타임 상수가 아닙니다. 그리고 템플릿은 컴파일시에만 구성되므로 모든 비 유형 템플릿 인자는 컴파일 타임 상수 여야합니다. 부스트 (Boost)가 그런 실수를하는 것은 이상한 것 같습니다. –

+0

@JoachimPileborg이 라이브러리의 퍼포먼스는 그다지 훌륭하지 않습니다. 나는 품질 측면에서 그렇게 낮은 수준에 놀라지 않는다. 나는 도서관을 한 번 사용해 보았다. 어떻게 이것을 왜 사람들이 사용하는지 볼 수 없다. 문자 그대로 의미가 없다. – user2485710

답변

0

Clang으로 컴파일 할 때 STL을 사용하면 시스템 STL (일반적으로 libstdC++)이 사용됩니다. 이전 버전 일 수 있습니다 (OSX를 사용합니까?). Clang은 libC++에서 C++ 11을 완벽하게 지원합니다. -stdlib = libC++를 명령 행에 추가하십시오. 또한 gcc와 clang을 -v와 함께 실행하고 include 경로를 검사하여 각 경우에 어떤 stdlib가 사용되는지 확인할 수 있습니다.