在C ++中运行时选择模板参数

时间:2009-03-03 22:04:41

标签: c++ templates runtime arguments

假设我有一组函数和类,这些函数和类被模板化使用单个(float)或double精度。当然,我只能写两段引导代码,或者乱用宏。但我可以在运行时切换模板参数吗?

3 个答案:

答案 0 :(得分:19)

不,您无法在运行时切换模板参数,因为模板在编​​译时由编译器实例化。你可以做的是让两个模板派生自一个公共基类,总是在你的代码中使用基类,然后决定在运行时使用哪个派生类:

class Base
{
   ...
};

template <typename T>
class Foo : public Base
{
    ...
};

Base *newBase()
{
    if(some condition)
        return new Foo<float>();
    else
        return new Foo<double>();
}

宏与模板有同样的问题,因为它们在编译时被扩展。

答案 1 :(得分:3)

模板是一种编译时机制。顺便说一句,宏也是如此(严格来说 - 一种预处理机制 - 即使在编译之前也是如此)。

答案 2 :(得分:2)

模板纯粹是一个编译时构造,编译器将扩​​展模板并使用指定的参数创建类/函数,并直接将其转换为代码。

如果您尝试在运行时在foo<float>foo<double>之间切换,则需要使用一些元编程技巧或者每个都有单独的代码路径。