의 난은 C 있다고 가정 해 봅시다 ++ 클래스는 가능한이삼항 연산자와 함수 서명
MyClassInstance->Foo(booleanValue?24:"a string");
같은 삼항 연산자를 사용하고 MyClass
의 다른 기능을하는 것입니다 booleanValue
의 값에 따라 호출됩니까?
의 난은 C 있다고 가정 해 봅시다 ++ 클래스는 가능한이삼항 연산자와 함수 서명
MyClassInstance->Foo(booleanValue?24:"a string");
같은 삼항 연산자를 사용하고 MyClass
의 다른 기능을하는 것입니다 booleanValue
의 값에 따라 호출됩니까?
삼항 연산자에는 포함되지 않습니다. 삼항 표현식의 유형은 두 번째 및 세 번째 피연산자의 공통 유형입니다. 일반 유형이 없다면 사용할 수 없습니다.
if (booleanValue)
MyClassInstance->Foo(24);
else
MyClassInstance->Foo("a string");
아니요. 과부하 해결을 수행하기 위해 컴파일러에서 "booleanValue?24:"a string"
의 유형은 무엇입니까?"라고 묻습니다. 그 질문에 답할 수는 없습니다.
컴파일 타임에 * 답할 수 없습니다. (내 투표지 BTW가 아닙니다 - 대답을 향상시키기 위해 작은 제안을 함) –
@Paul C++ 식에는 컴파일시에만 유형이 있습니다. 시각. 다른 것에 대해 이야기하는 것이 이치에 맞지 않습니다. –
네, 필자는 요점은 * 동적으로 호출 할 함수, 즉 런타임에 호출 할 함수를 결정할 수 있다고 생각하지만 C++에서는 컴파일 타임에 유형을 알아야합니다. –
삼항 조건식의 유형은 두 피연산자가 사기 버전 tible있는 일반적인 유형이있다 : 그래서 그냥 평범한 if
문을 사용합니다. 당신은 분명히 이 아니며은 "동적 과부하 해결"을 수행 할 수 있습니다.
int
및 char const *
에 공통된 유형이 없으므로 코드는 컴파일되지 않습니다 (테스트했을 때 확실하게 것으로 알려짐).
은 (당신은 decltype
과 함께, 삼항 조건이 정확하게 때문에 std::common_type
특성 클래스 템플릿의 구현에 그 의미로 사용된다는 것을 알고 기뻐할 수 있습니다.)
(조건 정적 을 알고있는 경우 같은 sizeof(int) != 7
로, 당신은 정적하지만 물론, 조건부 오버로드 확인을 수행한다는 것을 유사한 보이는 코드를 작성하는 중앙 정보국 (CIA) lization 템플릿 SPE를 사용할 수 있습니다.)
아니요, 허용되지 않습니다.
오버로드는 컴파일 타임이므로 런타임에 그렇게 작동하지 않습니다.
당신이 그러나 때로는 같은 것을 할 수있는 욕망이 iostream으로, 정확하게 수행 할 것입니다 코드의 공통되지 않습니다 : VAR1 및 VAR2 다른 유형이
os << (condition ? var1 : var2)
. 그것도 작동하지 않습니다.
당신은 할 수 :
MyClassInstance->Foo(booleanValue ? boost::any(24) : boost::any("a string"));
이 재미있다 ... – mauris
당신이 컴파일하고 그것을 어떻게되는지 실행하려고 있나요? –
이것은 컴파일되지 않습니다. 컴파일러는 다른 유형의 삼항 연산자에 대해 불평 할 것입니다. –