我正在经历一段地狱般的时间来解决我认为应该很容易做的事情。我有一个模板化的类,看起来像这样(有其他代码,用来加载值,等等)。我关心的类型有char、int、bool和std::string。
template <typename T>
class MyVector
{
public:
std::string get()
{
return m_vector[m_current_index]; // 1
return std::to_string(m_vector[m_current_index]); // 2
// 3
if constexpr (!std::is_same_v<T, std::string>) {
return std::to_string(m_vector[m_current_index]);
}
return m_vector[m_current_index];
}
private:
std::vector<T> m_vector;
int m_current_index{-1};
};
上面的选项(1)对于任何不是std::string的typename T都失败。
选项(2)适用于除std::的之外的任何typename T字符串
选项(3)似乎没有在编译时得到实际处理(与选项(1)的情况发生相同的错误)
发布于 2019-05-23 03:32:36
几乎就在我发帖的时候,答案突然出现在我面前……但也许这对将来的其他人有帮助!
if constexpr (!std::is_same_v<T, std::string>) {
return std::to_string(m_vector[m_current_index]);
} else {
return m_vector[m_current_index];
}
编译器不够聪明,不会忽略'else‘的情况,除非它特别在'else’块中。
https://stackoverflow.com/questions/56263726
复制相似问题