c++ - 如何将不同的实例化应用于相同名称的对象?

标签 c++ templates

int lim;    
do{
      cin>>lim;
      switch(lim)
      {
      case 1: {mpa<1,int,const char*> C; }break;
      case 2: {mpa<2,int,const char*> C; }break;
      case 3: {mpa<3,int,const char*> C; }break;
      case 4: {mpa<4,int,const char*> C; }break;
      case 5: {mpa<5,int,const char*> C; }break;
      default: cout<<"Incorrect number, please repeat\n";
      }
 }while(lim<1 || lim>5);

我想将一个值(1、2、3、4 或 5)传递给模板 int a,typename T1,typename T2。我需要这个模板的不同实例化。但是对象C会在switch之后被销毁。如何将不同的实例化应用于相同名称的对象?

最佳答案

在这种情况下,我认为最好的选择是重新考虑类 mpa在编译时不需要第一个参数。说真的,每个人都讨厌重写东西,但那是你应该做的。

因为我知道你会忽略它,这里有一个解决方法:

上课mpa_base<class, class> , 那mpa继承自并具有所有相同的功能,但它们都是虚拟的(特别是析构函数)。然后,您可以这样做:

typedef mpa_base<int, const char*> mpa_int_pchar;
std::unique_ptr<mpa_int_pchar> C; //this is a smart pointer to a mpa object
int lim;    
do{
      cin>>lim;
      switch(lim)
      {
      case 1: C.reset(new mpa<1,int,const char*>()); break;
      case 2: C.reset(new mpa<2,int,const char*>()); break;
      case 3: C.reset(new mpa<3,int,const char*>()); break;
      case 4: C.reset(new mpa<4,int,const char*>()); break;
      case 5: C.reset(new mpa<5,int,const char*>()); break;
      default: cout<<"Incorrect number, please repeat\n";
      }
 }while(lim<1 || lim>5);

关于c++ - 如何将不同的实例化应用于相同名称的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9894491/

相关文章:

C++ 非类型模板模板到函数指针/ref

c++ - 将外部模板类与 STL 类一起使用

angular - 禁用模板驱动的 Angular 中的按钮

c++ - iOS:添加C++静态库后应用体积太大?

c++ - OpenCV calibrateCamera 不收敛到正确的解决方案(投影仪校准)

c++ - 对右值的非常量引用

c++ - [heap] 或 [anon] 在 memps 输出中意味着什么

c++ - 如何在访问指针值时保护应用程序免受读取访问冲突?

javascript - 当 tr 必须存在于模板中时,使用 Marionette ItemView 生成无语义的表标记

vba - VBA : Run-Time error '91' (Code working in template but not “new from template” )