簡體   English   中英

可以寫一個 function 接受一個類型並返回一個不同的類型

[英]Can one write a function which takes a type and returns a different type

是否可以編寫一個采用類型並返回(相關)類型的 function。 例如,function 采用名為“RandomVariable”的類型並返回名為“RandomVariableCovariance”的類型。 我想一般來說問題是類型名是否可以是參數或返回類型。 C++0x 很好。

你不能用函數來做到這一點,但你可以用模板專業化來做到這一點。 例如

template <class T>
struct ConvertType;

template <>
struct ConvertType<RandomVariable>
{
    typedef RandomVariableCovariance type;
};

int main()
{
    ConvertType<RandomVariable>::type myVar;
}

定義一個類型ConvertType ,它專門用於從RandomVariable轉換為RandomVariableCovariance 根據您的需要,可以通過這種方式進行各種巧妙的類型選擇。

類型名不能是 function 的參數或返回值; 類型是編譯時的事情!

這是 C++0x 的一長串東西。 這就是為什么他們創建了這種奇怪的 function 定義格式:

auto FuncName(Type1 param1, Type2 param2) -> ReturnType {...}

它與 decltype 結合使用,允許您執行以下操作:

auto FuncName(Type1 param1, Type2 param2) -> decltype(param1 + param2) {...}

這意味着返回類型將是您調用 operator+(Type1, Type2) 時獲得的任何內容。

請注意,C++ 是一種靜態類型語言。 您不能在運行時進行類型計算。 它必須在編譯時通過這樣的機制或某種形式的模板元編程來完成。

請原諒我可怕的 C,因為自從我實際使用它以來,它已經永遠存在了:

typedef int RandomVariable;
typedef float RandomVariableCovariance;

RandomVariableCovariance myFunc(RandomVariable x) {
    ....
}

暫無
暫無

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

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