gpt4 book ai didi

c++ - 如何在模板中的类型之间转换并返回原始类型

转载 作者:行者123 更新时间:2023-11-28 03:08:35 26 4
gpt4 key购买 nike

我想制作一个添加三个数字的模板函数。类型可以是 int 或 char 或 string。我如何添加这些然后使用相同的类型返回正确的值。示例:三个数字字符串 {5,6,7} 相加应为 18,然后将 18 作为字符串返回。三个字符的数字 {5,6,7} 应加起来为 18,然后以字符形式返回 18。

template <class MyType>
MyType GetSum (MyType a, MyType b, MyType c) {
return (a+b+c);
}

int a = 5, b = 6, c = 7, d;
char e = '5', f = '6', g = '7', h;
string i= "5", j= "6", k= "7", l;

d=GetSum<int>(a,b,c);
cout << d << endl;

h=GetSum<char>(e,f,g);
cout << h << endl;

l=GetSum<string>(i,j,k);
cout << l << endl;

此代码适用于 int,但显然不适用于 char 或 string。我不确定如何将未知类型转换为 int 并返回,以便我可以添加数字。

最佳答案

你想要加法,就好像项目是整数一样,尽管可能是 int、char 或 std::string。

也就是说,先把它们变成整数,然后再转换回原来的类型:

template <typename T>
T sum(T t1, T t2, T t3)
{
std::stringstream input;
input << t1 << " " << t2 << " " << t3;
int sum = 0;
int item;
while ( input >> item )
{
sum += item;
}
// at this point we have the wanted value as int, get it back in a general way:
std::stringstream output;
output << sum;
T value;
output >> value;
return value;
}

添加 char 时我会小心一些就是那样。 '18'并不是完全有意义的 afaik,或者可能至少依赖于平台。

您需要包含 <sstream>在你的项目中使用 std::stringstream .

关于c++ - 如何在模板中的类型之间转换并返回原始类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19070377/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com