C ++模板,声明对象而不进行初始化

时间:2015-11-02 22:52:57

标签: c++ class templates object types

所以我有以下情况。基本上我想知道是否可以在不知道它的类型的情况下声明模板类的对象,或者是否有其他方法可以用于这种情况。

template <class T> class SomeTemplateClass{
    vector<T> v;
}

int main(){
  --- Here is where i want to declare the object ---
  SomeTemplateClass o;
  cin >> eType;
  --- Type is not determined until some user input---
  if (eType == "int"){
        o = SomeTemplateClass<int> (size);
  } 
  else if (eType == "char") {
      o = SomeTemplateClass<char> (size);
  }
  else if (eType == "float") {
     o = SomeTemplateClass<float> (size);
  } 

必须将类型作为标准输入传递,因为这是赋值的要求。

编辑:忽略其他一切,我的问题是我想创建一个T类型的向量,其中T是在运行时通过用户输入确定的。这是否可行,如果不是可接受的解决方案

1 个答案:

答案 0 :(得分:1)

好吧,从阅读你的评论我发现你想要那样的东西

template<typename T>
class myclass {
    vector<T> v;
... other methods
};

template<typename T>
void do_something_cool_with_myclass(myclass<T> obj)
{
   //do something with obj, type independently
}

int main() {
    ...
    cin >> type; //get type from user somehow
    switch (type) {
        case int:
         myclass<int> obj;
         do_something_cool_with_myclass<int>(obj);
        ....
    }
}

您不会浪费内存,并且可以在编译时不知道它的类型来处理您的数据。