我有一个模板函数,该函数根据提供的类型执行某些操作:
template<typename T>
T read()
{
if (std::is_integral<T>()) {
return static_cast<T>(std::stoi(readToken()));
}
else if (std::is_same<T, float>()) {
return std::stof(readToken());
}
else throw std::logic_error("Invalid type");
}
当调用read<int>()
时,编译器会发出以下警告:
控制到达非无效函数的结尾
使用::value
时,结果相同。
不是应该是布尔表达式吗?如果没有,您如何做到这一点?
read
是模板。每次实例化此模板时,编译器都会生成函数的整个主体。当您调用read<int>()
时,也会编译带有array
的段,但是无法将数组分配给返回类型int
。这就是为什么您得到错误。