문제

단일을 사용하도록 템플릿으로 된 함수와 클래스 세트가 있다고 가정합니다.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> 런타임에는 메타 프로 그램 트릭을 사용하거나 각각에 대한 별도의 코드 경로가 있어야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top