簡體   English   中英

C ++:如何檢查模板函數中使用的數據類型?

[英]C++: How to check which datatype used in a template function?

我需要為每種類型使用不同的函數,但是大多數代碼保持不變。

如何測試我的模板函數參數收到的數據類型(或結構)?

如何測試我的模板函數參數收到的數據類型(或結構)?

你為什么要? 如果要使用模板,那是因為每種類型的代碼都相同。 否則,您將只使用常規的重載函數。

另一方面,如果您只有一部分算法需要特定於類型,那么沒有什么可以停止使用從模板主函數調用的重載子函數了:

template <typename T>
bool IsFooBar(T Baz)
{
    // here the code is common for every type
    // ...
    // Here Baz must be modified in a type-speficic way:
    DoQuux(Baz);
    // ...
    return /* ... */;
}

// DoQuux is a regular overloaded function
void DoQuux(int & Baz)
{
    // ...
}

void DoQuux(double & Baz)
{
    // ...
}

void DoQuux(std::string & Baz)
{
    // ...
}

// ... other DoQuux ...

您的模板應具有模板參數列表:

template <typename T, typename U>
void f(T t, U u) { }

如果調用f(x, y) ,則在函數模板fTU是從參數xy推導出的類型。 (當然,您可以做的事情比這復雜得多,但這是最基本的用例。)

如果部分模板的專業化還不夠,則可以使用RTTI將對象的類型與另一個對象的類型進行比較。 例如,如果您的模板帶有兩個類型的args,則可以測試typeid(T) == typeid(U)以查看它們是否相同。

暫無
暫無

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

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