我有以下函數模板無效的轉換錯誤,返回值取決於它的泛型類型
template<typename T>
T foo(){
if(std::is_same<T,int>::value){
return 1;
}
if(std::is_same<T,std::string>::value){
return "Hello";
}
}
我想這樣應用它:
int main(){
std::cout << foo<int>() << std::endl; // 1
std::cout << foo<string>() << std::endl; // "Hello"
}
如果我嘗試編譯我的模板編譯器會拋出以下錯誤: error: cannot initialize return object of type 'int' with an lvalue of type 'const char [6]'
。
如果我刪除第二個if
聲明一切編譯好,我得到正確的輸出,因此我猜對比std::is_same<T,int>::value
按預期工作。
好像編譯器檢測的T
的類型,如果檢查所有return
語句匹配,並引發錯誤,因爲std::string
是不是隱含強制轉換爲int
。
有沒有人有解決方案或其他解決方法來滿足我的意圖?
編輯
解釋我的意圖:我寫一個包裝類數據庫遊標類。由於通常定義了這些遊標,因此它有幾個成員函數,如getInt()
或getString()
。我的想法是實現一個通用的get<T>()
,它使用相應的遊標成員函數,這取決於T
。在if語句
在C++ 17你會如果constexpr允許某些零件不能編譯,請取得''。現在,代碼的所有部分必須對* all *可能的類型'T'有效。您將不得不添加該函數的單獨重載。 –