C++ 如何仅为模板指定一次值?
假设我有一门课,如下所示:C++ 如何仅为模板指定一次值?,c++,templates,object,C++,Templates,Object,假设我有一门课,如下所示: template <class T> class Object { private: T object; public: Object(T object) : object(object) {} }; 一旦用户指定,我希望能够创建该对象。但是,我不想经历一个if…else构造。也就是说,似乎需要这样做的方式是 if (answer == 'c') { Object(character); } els
template <class T>
class Object {
private:
T object;
public:
Object(T object) : object(object) {}
};
一旦用户指定,我希望能够创建该对象。但是,我不想经历一个if…else
构造。也就是说,似乎需要这样做的方式是
if (answer == 'c') {
Object(character);
} else {
Object(int);
}
显然不完全正确,但这就是想法。然而,这真的很烦人,因为还有其他更复杂的事情在进行,我基本上每次都要重建这个if…else
树,使代码相当混乱
有没有一种方法可以做到:
Do you want to create a char or int (c/i)?
type = character || int; //this would still be determined by an if..else
Object(type);
没有
<> C++中的标识符类型必须静态已知。在使用类层次结构之外,没有指定“一组类型之一”的机制 您可以使用继承和模式:
模板实例,例如
对象
和对象
,是不同的类型。撇开模板不谈,您所做的基本上与尝试创建一个变量相同,该变量可以是char
或int
,具体取决于用户在运行时的选择。你不能那样做;编译器需要在编译时知道所有变量的类型
您可以使用一个或封装一个的东西(例如)获得类似的效果。或者,您可以创建一个抽象基类,其中包含表示希望使用这些值执行的操作的虚拟函数,并为不同类型的值编写实现这些虚拟函数的派生类。但是您在这里尝试的使用模板的方法是不可能的。在
模板
类中使用大部分代码并使其成为静态
方法,其类型t
为char
或int
现在执行一个if/else并使用正确的类型调用静态方法。模板参数在编译时进行计算。实际上,没有办法通过用户输入来获取它们。
Object* pObj = CreateObject(type); // IntObject or CharObject