Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何仅为模板指定一次值?_C++_Templates_Object - Fatal编程技术网

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