簡體   English   中英

如何從模板化類的方法返回std :: string,無論類型如何?

[英]How to return std::string from method of templated class, no matter the type?

我有一段時間解決我認為應該是一件容易的事。 我有一個模板化的類,看起來像這樣(有其他代碼,加載值等)。 我關心的類型是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的typename T,上面的選項(1)都會失敗。

選項(2)適用於 std :: string 之外的任何typename T.

選項(3)似乎沒有在編譯時實際處理(與選項(1)的情況相同的錯誤發生)

幾乎在我發布的時候,答案就跳出來了......但也許這對未來的其他人有幫助!

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'塊中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM