는 다음 사항을 고려하십시오는 C++ 11 동적 캐스트 -> 스위치
struct B { };
template<typename T>
struct D : B
{
T t;
}
void g(int i) { ... }
void g(string s) { ... }
void g(char c) { ... }
void f(B* b)
{
if (dynamic_cast<D<int>*>(b))
{
g(dynamic_cast<D<int>*>(b)->t);
}
else if (dynamic_cast<D<string>*>(b))
{
g(dynamic_cast<D<string>*>(b)->t);
}
else if (dynamic_cast<D<char>*>(b))
{
g(dynamic_cast<D<char>*>(c)->t)
}
else
throw error;
};
여기
이 T의 세 가지 유형이 있습니다 - INT, 문자열, 문자는 -하지만 가능한 유형의 목록이 있다면 더 길고, n을 말하면, if else chain은 O (n)을 수행 할 것입니다.
이 문제를 해결하는 방법 중 하나는 D에 여분의 형식 코드를 저장하고 형식 코드에 switch
을 저장하는 것입니다.
RTTI 시스템에는 이미 이러한 코드가 있어야합니다. 거기에 접근 할 수있는 곳이 있나요?
아니면 내가하고 싶은 일을하는 더 좋은 방법이 있습니까?
@ JoachimPileborg :이 장난감의 예에서 나는'f'를'struct D {virtual void f() {g (t)}}'로 대체 할 수 있지만 이것은 더 큰 문제를 놓치고 있습니다. –