이 방법은 가능하지 않지만 템플릿 프로그래밍 마법을 사용하여 입력에 따라 다른 반환 값을 갖는 함수를 정의하는 방법이 있습니까? 잠재적컴파일 타임에 템플릿 함수 결과의 유형을 결정 하시겠습니까?
는 :
template<typename resultType>
resultType GetResult(const std::string &key); // where the value of key may change resultType
template<typename keyType, typename resultType>
resultType GetResult(keyType key);
지금, 나는 위가 올바르지 않은 것을 알고있다. 첫 번째 함수를 사용하려면 함수를 호출하기 전에 resultType
이 무엇인지 알아야합니다. 그러나, 나는 많은 "불가능한"것들이 간접적 인 또 다른 계층 (또는 두 가지)으로 가능해질 수 있다는 것을 배웠다. 나는 그것을 할 올바른 방법을 찾을 수없는 것 같습니다.
두 번째 옵션은 내 두뇌를 간질입니다. 문자열을 유형 (또는 무엇이든)에 매핑하는 다른 도우미 객체를 정의 할 수 있어야한다고 생각한 다음 해당 템플릿 매개 변수를 사용하여 GetResult
을 호출하는 컴파일 시간 결과를 얻었습니다.
편집 : resultType
에 사용 된 유형이 서로 관련이 없다고 가정합니다. "실제"유형에 대해 테스트 할 수있는 인터페이스가 없습니다 (어쩌면 int
및 MyClass *
일 수 있음).
편집 2 : 실제 사용에서는 위젯, 가젯 등의 컬렉션이 포함 된 제 3 자 개체가 있습니다. 문자열 ID (형식이 접두사로 붙어 있기 때문에 편리함) 그러나 문자열을 구문 분석해야 "collectionInstance.getWidget (id)"를 호출해야한다는 것을 알 수 있습니다. 내 계획은 이러한 내부 개체를 얻는 방법을 지능적으로 알 수있는 씬 개체를 작성하는 것이 었습니다.
나는이 대답에 대한 응답으로 질문을 업데이트했다. 편집 2를 참조하십시오. – moswald
boost :: variant/QVariant/boost :: any를 사용하지 않기를 바랬습니다. 따라서 런타임 데이터를 기반으로 함수의 결과를 변경하는 방법을 묻는 것입니다. 오 잘. 네가 아마 이것에 대해 맞는 것 같아. miked 옵션을 살펴 보겠다.하지만 실제로 사용되는 것을 보게 될 것이다. – moswald