首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从模板化类的方法返回std::string,不管是什么类型?

如何从模板化类的方法返回std::string,不管是什么类型?
EN

Stack Overflow用户
提问于 2019-05-23 03:30:57
回答 1查看 57关注 0票数 3

我正在经历一段地狱般的时间来解决我认为应该很容易做的事情。我有一个模板化的类,看起来像这样(有其他代码,用来加载值,等等)。我关心的类型有char、int、bool和std::string。

代码语言:javascript
复制
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)的情况发生相同的错误)

EN

回答 1

Stack Overflow用户

发布于 2019-05-23 03:32:36

几乎就在我发帖的时候,答案突然出现在我面前……但也许这对将来的其他人有帮助!

代码语言:javascript
复制
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’块中。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56263726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档