首页 > 解决方案 > 无论类型如何,如何从模板类的方法返回 std::string?

问题描述

我正忙着解决我认为应该很容易做的事情。我有一个模板类,看起来像这样(有其他代码,加载值等)。我关心的工作类型是 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};
};

对于不是 std::string 的任何类型名 T,上面的选项 (1) 都会失败。

选项 (2) 适用于std::string 之外的任何类型名 T

选项 (3) 似乎没有在编译时得到实际处理(与选项 (1) 的情况相同的错误发生)

标签: c++stringtemplatesstd

解决方案


几乎在我发布的同时,答案突然出现在我身上……但也许这对将来的其他人有帮助!

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”块中。


推荐阅读