簡體   English   中英

可以控制C ++中模板內的返回類型嗎?

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

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