2011-09-17 3 views
6

, 프로그램은 표현 c ? x : y의 x는 Visual C++ 2008boost :: bind는 조건식을 사용할 수 없습니까? I는 조건식을 주석 처리하면

#include <iostream> 
#include <boost/bind.hpp> 
#include <boost/thread.hpp> 
typedef boost::function<void(int, int)> vii_t; 
typedef boost::function<void(int)> vi_t; 

void foo(int a, int b){} 
void bar(int a){} 
int main(int argc, char* argv[]) 
{ 
    //vi_t test= true ? boost::bind(foo, _1, 100) : boost::bind(bar, _1); 
    vi_t test1 = boost::bind(foo, _1, 100); 
    vi_t test2 = boost::bind(bar, _1); 
    //test(1); 
    test1(1); 
    test2(1); 
    return 0; 
} 
+2

예를 들면, _tmain 및 _TCHAR과 같은 컴파일러 관련 구문을 피할 수 있습니다. 'int main (int argc, char * argv [])'를 사용하십시오. –

+1

컴파일러 오류를 게시 하시겠습니까? – thiton

+0

덧붙여서, 표준 헤더 ('iostream')는 따옴표가 아니라 꺾쇠 괄호 안에 들어 있습니다 (예 :'#include ',''iostream''이 아님) –

답변

1

하에서 컴파일 실패 및 Y는 동일 유형이거나 하나는 다른 전환해야한다. 그 공통 유형은 전체 표현식의 유형입니다.

아마도 매개 변수 수가 다른 boost::bind은 서로 변환 할 수없는 다른 유형을 반환합니다. 둘 다 vi_t으로 변환 할 수 있다고해도 도움이되지 않습니다.

+2

동의합니다. 삼항 연산자의 가장 오른쪽에있는 두 표현식을 vi_t로 캐스팅하면 컴파일해야합니다. –

+0

소리가 맞습니다. 작동해야하는 또 다른 방법은 삼항 연산자를 if로 대체하는 것입니다. – Staffan

+0

이것은 C/C++에서보다 큰 규칙의 결과입니다. 예상되는 유형은 값이 계산되는 방법을 결정하지 않습니다. 따라서 'float f = 2/3;'과 같은 코드에서 또는 'float f = foo (2);', 사용 된 나눗셈의 유형 또는 선택한 'foo'의 과부하는 어떤 식 으로든 결과를 부동 소수점에 저장한다는 사실에 영향을받지 않습니다. –

관련 문제