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