gpt4 book ai didi

c++ - 返回多种类型

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:37:23 24 4
gpt4 key购买 nike

下面的代码片段是一个游戏,编译器提示返回值,所以我想得到一些反馈,告诉我如何做这个技巧,让函数根据输入的类型返回两种不同的类型,但不重载

template <typename T>
T GetTimeDead(uint64 Guid)
{
bool stringOutput;
if(typeid(T) == typeid(float))
stringOutput = false;
else
stringOutput = true;

bool found = false;
for(map<uint32, TrackInfo>::iterator itr = dieTracker.begin(); itr != dieTracker.end(); ++itr)
{
if(itr->second.GUID == Guid)
{
found = true;
break;
}
}

if(!found)
stringOutput ? return "never" : return sObjectMgr->FindCreature(Guid)->GetCreatureData()->spawntimesecs;

if(!stringOutput)
return dieTracker.find(Guid)->second.seconds;
float seconds = dieTracker.find(Guid)->second.seconds;
uint64 secs = seconds % 60;
uint64 minutes = seconds % 3600 / 60;
uint64 hours = seconds % 86400 / 3600;
uint64 days = seconds / 86400;
ostringstream ss;
if(days)
days != 1 ? ss << days << " Days " : ss << days << " Day ";
if(hours)
hours != 1 ? ss << hours << " Hours" : ss << hours << " Hour";
if(minutes)
minutes != 1 ? ss << minutes << " Minutes " : ss << minutes << " Minutes ";
if(secs || (!days && !hours && !minutes))
secs != 1 ? ss << secs << " Seconds " : ss << secs << " Second ";
ss << "ago";
return ss.str();
}

最佳答案

如果您想使用模板定义通用行为,但要覆盖少数特定类型的行为,您应该使用模板特化

template<typename T>
std::string GetTimeDead(uint64 Guid)
{ /* code to implement your version that returns std::string */
}

template<>
float GetTimeDead<float>(uint64 Guid)
{ /* code to implement your version that returns float */
}

您目前出错的原因是您将返回类型定义为T。但是您的逻辑已设置为如果 Tfloat 类型,则该函数会尝试返回 std::string。可能没有从 std::stringT 的隐式转换,因此出现错误。

如果您不想重复公共(public)代码,您可以将其提取到一个单独的模板函数中,由上面的两个函数调用。

关于c++ - 返回多种类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16500955/

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