所以我制作了一个非常简单的堆栈,工作得很好并决定将其转换为模板,它也工作正常,但是当我把它变成整数时输入的东西
string m;
getline(cin, m);
linkedliststack<int> str;
for (int i = 0; i < m.length(); i++)
{
str.push(m[i]);
}
似乎通过使用这种输入方法,m [i]变为char转为int,换句话说转为ASCII码,所以如果我输入1则给出48,2给49等。 简单的解决方案当然就是这个。
str.push(m[i]-48)
但有没有办法让它自动化,e.i。如果条件或任何东西? 如果是,那么所需的语法是什么?
感谢。
答案 0 :(得分:0)
答案 1 :(得分:0)
我必须为重复这个问题道歉,因为它与How do I get the type of a variable?上的问题有关 对不起,这是我第一次提问。
所以要解决这个问题,我在课堂上做了一个新功能
string type(){ return typeid(head->value).name(); }
并且新条件解决了这个问题。
if (str.type()== "int")
答案 2 :(得分:0)
如果您能够使用C ++ 14,那么可能会有一个enable_if解决方案。 甚至可能是SFINAE解决方案。但是,我对此并不十分熟悉。
我假设您的推送方法被声明为
void push(typename T);
然后您正在做的是将char (m[i])
隐式转换为int str.push(m[i]);
您可以提供一个重载的模板方法,该方法可以处理char输入并将其正确转换为您的typename。
这样的事情:
void push(const char input)
{
push(atoi(input));
// push(input-48);
}
但是可能需要考虑很多错误: 如果atoi()无法将char转换为整数会发生什么? 在-48的情况下,如果输入是非数字字符,您将在堆栈上推送非预期的数字。 如果模板未实例化,将会发生什么。