假设我有一组函数和类,它们被模板化为使用单 ( float
) 或double
精度。当然,我可以只写两段引导代码,或者乱用宏。但是我可以在运行时切换模板参数吗?
goodrone
问问题
7315 次
3 回答
20
不,您不能在运行时切换模板参数,因为模板是由编译器在编译时实例化的。您可以做的是让两个模板都从一个公共基类派生,始终在代码中使用基类,然后决定在运行时使用哪个派生类:
class Base
{
...
};
template <typename T>
class Foo : public Base
{
...
};
Base *newBase()
{
if(some condition)
return new Foo<float>();
else
return new Foo<double>();
}
宏与模板有同样的问题,因为它们在编译时被扩展。
于 2009-03-03T22:10:09.893 回答
3
模板是一种编译时机制。顺便说一句,宏也是如此(严格来说 - 一种预处理机制 - 甚至在编译之前就出现了)。
于 2009-03-03T22:07:06.997 回答
2
模板纯粹是编译时构造,编译器将扩展模板并使用指定的参数创建您的类/函数,并将其直接转换为代码。
如果您试图在运行时foo<float>
和foo<double>
运行时之间切换,您要么需要使用一些元编程技巧,要么只为每个使用单独的代码路径。
于 2009-03-03T22:11:40.967 回答