gpt4 book ai didi

C++模板返回具有相同参数的不同类型

转载 作者:太空宇宙 更新时间:2023-11-04 11:23:33 25 4
gpt4 key购买 nike

基本上,如果我有这个:

template <class T> 
inline T Foo(int x)
{
switch (x)
{
case 0:
return true;
break;
case 1:
return false;
break;
case 2:
return 100;
break;
default:
break;
}
}

然后我必须这样使用它:

int x = Foo<int>(2);
bool b = Foo<bool>(0);

如果可能的话,我更希望能够这样做:

int x = Foo(2);
bool b = Foo(0);

我看到了this question但很难将其应用到我的场景中。任何帮助或指向正确方向的帮助都会很棒。

最佳答案

这里的想法是使用一个可以转换为我们想要的返回类型的返回类型。在这种情况下,我们可以使用可以转换为 int、bool、double 等的字符串。使用 stringstream。

inline polyType Foo(int x)
{
polyType result;
switch (x)
{
case 0:
result.value = "0";
break;
case 1:
result.value = "1";
break;
case 2:
result.value = "100";
break;
case 3:
result.value = "awesome";
break;
case 4:
result.value = "10.22";
break;
default:
break;
}
return result;
}

其中 polyType 声明如下,对任何类型名称 T 进行类型转换,如 here 所述

struct polyType {
string value;

template <typename T>
operator T() const
{
stringstream ss(value);
T convertedValue;
if ( ss >> convertedValue ) return convertedValue;
else throw runtime_error("conversion failed");
}
};

现在你可以把它当作

int a = Foo(2);
bool b = Foo(0);
float c = Foo(4);

在您的情况下,如果您只想使用 int 和 bool。因为 int 可以转换为 bool,所以你可以直接返回 int。不要返回“true”和“false”,而是使用 1 和 0。

int Foo(int x)
{
switch (x)
{
case 0:
return 1;
break;
case 1:
return 0;
break;
case 2:
return 100;
break;
default:
break;
}
}

关于C++模板返回具有相同参数的不同类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27437367/

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