如何为特定的模板数据类型设置条件

How to make condition for specific template datatypes

本文关键字:数据类型 设置 条件      更新时间:2023-10-16

所以我做了一个非常简单的堆栈,它运行得很好,并决定将其转换为模板,它也运行得很不错,但当我将其转换成整数时,输入发生了一些事情

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)

但是,有没有一种方法可以使它自动化,比如使用if条件或其他什么?如果是,那么需要什么语法?

谢谢。

字符串push_back是
void push_back (char c);

即它需要CCD_ 1。如果您希望该值为char,则必须使用例如itoa等进行转换。

我必须为重复这个问题道歉,因为它与如何获取变量的类型有关?对不起,这是我第一次问问题。

为了解决这个问题,我在类中创建了一个新函数

string type(){ return  typeid(head->value).name(); } 

新的条件解决了这个问题。

if (str.type()== "int")

如果您能够使用C++14,那么可能会有一个enable_if解决方案。甚至可能是SFINAE的解决方案。不过,我在这方面不是很有经验。

我假设你的推送方法被声明为

void push(typename T);

然后,您要做的是隐式地将char (m[i])转换为int str.push(m[i]);

您可以提供一个重载的模板方法,该方法可以处理char Input并将其正确转换为您的typename。

类似这样的东西:

void push(const char input)
{
    push(atoi(input));
    // push(input-48);
}

但是,可能需要考虑许多错误:如果atoi()无法将字符转换为整数,会发生什么情况?在-48的情况下,如果输入是非数字字符,则会在Stack上推送意外数字。如果模板没有用实例化,会发生什么。