C ++에서 런타임에서 템플릿 인수를 선택하십시오
문제
단일을 사용하도록 템플릿으로 된 함수와 클래스 세트가 있다고 가정합니다.float
) 또는 double
정도. 물론 나는 단 두 조각의 부트 스트랩 코드를 쓸 수 있거나 매크로를 엉망으로 만들 수 있습니다. 그러나 런타임에 템플릿 인수를 전환 할 수 있습니까?
해결책
아니요, 템플릿은 컴파일 타임에 컴파일러에 의해 인스턴스화되므로 런타임시 템플릿 인수를 전환 할 수 없습니다. 당신이 ~할 수 있다 Do는 두 템플릿이 공통 기본 클래스에서 파생되며 코드에서 항상 기본 클래스를 사용한 다음 런타임에 사용할 파생 클래스를 결정합니다.
class Base
{
...
};
template <typename T>
class Foo : public Base
{
...
};
Base *newBase()
{
if(some condition)
return new Foo<float>();
else
return new Foo<double>();
}
매크로는 컴파일 타임에 확장된다는 점에서 템플릿과 동일한 문제가 있습니다.
다른 팁
템플릿은 컴파일 타임 메커니즘입니다. BTW, 매크로도 (엄격하게 말하면 - 전처리 메커니즘 - 편집 전에도 나오는).
템플릿은 순전히 컴파일 타임 구조물이며, 컴파일러는 템플릿을 확장하고 지정된 인수로 클래스/기능을 만들고이를 코드로 직접 변환합니다.
당신이 사이를 전환하려는 경우 foo<float>
그리고 foo<double>
런타임에는 메타 프로 그램 트릭을 사용하거나 각각에 대한 별도의 코드 경로가 있어야합니다.
제휴하지 않습니다 StackOverflow