[英]Can the return type inside templates in C++ be controlled?
我有一個模板化的功能類似於:
template<class T>
T foo( string sReturnType )
{
//pseudo code
if( sReturnType = "string" )
{
lookup data in string table
return a string
}
else
{
look up in number table
return number answer
}
}
用法如下:foo(“string”)
在函數內部,需要有從字符串表或數字表中提取並返回該值的邏輯。 我玩弄了這個並且無法按照我的預期讓它工作。 看起來它應該是非常簡單易行的。 這是一種有效的方法和模板的使用嗎? 我查看了模板特化,但最后還是編寫了兩個獨立的代碼庫,為什么不使用重載函數呢? 有沒有更好的辦法?
否 - 沒有辦法聲明具有不同返回類型的函數(模板函數可能具有不同的返回類型,但這些將取決於模板參數)。
你可以返回一個封裝所有可能的返回類型的類型(比如boost :: any或boost :: variant)。
你必須重載foo()
; 幾乎沒有辦法繞過它。
std::string foo( std::string )
{
// look up data...
return std::string();
}
int foo( int )
{
// look up data...
return -1;
}
int i = foo( 1 );
std::string s = foo( "string" );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.