[英]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.