我编写了一个模板函数,它将int32,bool和int16作为输入。 但是对于布尔来说,我收到了这个警告。任何想法,我该如何解决。
template<class T>
void GameControl::assignValues(char *gaff, T &output)
{
output = T(atoi(gaff));
}
函数调用如下:
int32 intout;
assignValues("1234", intout);
bool boolout;
assignValues("1234", boolout);
任何人都可以告诉我,如何摆脱警告?
编辑: 这有效,但不确定后果。我只是压制了警告。
#pragma warning( push )
#pragma warning( disable : 4101)
// Your function
#pragma warning( pop )
答案 0 :(得分:3)
您的第一份工作是将功能参数列表更改为const char* gaff
,因为标准C ++不允许const char[N]
衰减到char*
。讽刺的是,你的编译器没有发出诊断信息,但却抱怨这个可疑的演员!
对于该警告,您可以使用
强制解决问题output = static_cast<T>(atoi(gaff));
然后,大多数编译器会假设您知道自己在做什么。如果您仍然收到警告,那么专门化 bool
案例的模板函数;一个解决方案,总的来说,我认为我更喜欢(除了关闭该特定功能的警告的实用方法):
template<>
void assignValues(const char *gaff, bool &output)
{
output = atoi(gaff) != 0;
}
答案 1 :(得分:0)
您可以完全专门化bool
的功能模板:
template<>
void GameControl::assignValues<bool>(char *gaff, boot &output)
{
output = !!atoi(gaff);
}