C++ 使用动态bool变量实例化模板
我想根据布尔标志从函数返回一个类型。其想法是稍后在程序中创建一个测试类的实例,并使用这个traits结构运行,该结构将保存实际类型。但是,现在我不知道traits函数的返回类型是什么C++ 使用动态bool变量实例化模板,c++,templates,typetraits,C++,Templates,Typetraits,我想根据布尔标志从函数返回一个类型。其想法是稍后在程序中创建一个测试类的实例,并使用这个traits结构运行,该结构将保存实际类型。但是,现在我不知道traits函数的返回类型是什么 class Test { public: template <typename T> class Traits { public: typedef T type; }; ... }; ??? Test::Options::traits(){
class Test {
public:
template <typename T>
class Traits {
public:
typedef T type;
};
...
};
??? Test::Options::traits(){
if(timer){
return Test::Traits<Timeable<Test>>();
} else {
return Test::Traits<Test>();
}
}
类测试{
公众:
模板
阶级特征{
公众:
T型;
};
...
};
??? 测试::选项::特征(){
中频(定时器){
返回测试::Traits();
}否则{
返回测试::Traits();
}
}
函数只能返回一种特定类型
<>在C++中没有方法在返回类型上超载。
不能动态地改变函数的返回类型。
你所寻找的是运行时多态性,而C++模板是编译时多态性。 如何使用返回值?类似于if(它的类型是某物)。。。还有代码>在这种情况下,可以使用std::variant
(C++17)
还是只调用所有变体中都存在的方法?在这种情况下,可以使用良好的旧继承。将一个公共接口提取到一个纯抽象类(通常称为“接口”),从中派生出您想要返回的所有类型。啊,不要按值返回它。您可以返回,例如std::unique_ptr
(适合您的示例,但涉及动态内存分配),或者任何其他类型的引用C++,不幸的是,它不能以这种方式工作。不过有好消息。C++17有一个std::variant
类型,可用于有效地执行此操作。但无论是谁调用它,都只需要做一点额外的工作,以确定返回的是哪种类型。或者,如果timer
有效地constexpr
,则可以通过专门化来实现。