根据C ++中的用户输入更改模板类型

时间:2018-01-23 07:15:40

标签: c++ class templates casting stack

我的任务是创建一个Stack类模板,以便它可以用于其他数据类型,如int,double,string等。我所坚持的是拥有无类型Stack对象的声明在用正确的类型实例化它之前。也许是因为我的搜索错误,但我无法找到任何有关我可以转换的基类的信息。

//in the main method
//get user input, which will be "int", "string", "double", etc.
string type;
cin >> type;

MyStack<???> stack1;
if(type == "int")
//convert stack1 to MyStack<int>
else //same thing for other data types

1 个答案:

答案 0 :(得分:4)

你做不到。但是你可以解决潜在的问题。在使用延续传递样式:

//in the main method
//get user input, which will be "int", "string", "double", etc.
std::string type;
std::cin >> type;

[&](auto&&next){
  if(type == "int")
    return next(MyStack<int>{});
  else if (type=="string")
    return next(MyStack<std::string>{});
  else if (type=="double")
    return next(MyStack<double>{});
  else
    throw std::invalid_argument(type);
}([&](auto&& stack1){
  // Here stack1 is the correct type
});

这可能不是你的导师要求你做的。