我有這樣一個類部件:
class widget_11 {
public:
template<typename T>
void process_pointer(T* ptr)
{
std::cout << *ptr;
}
};
我的問題是,我不明白這兩個宣告之間有什么區別? 這兩個宣告的區別:
template<>
void widget_11:: process_pointer(double*)= delete。
template<>
void widget_11::process_pointer<double> (double*) = delete;
我的問題是,這兩個洗掉函式的定義是否做同樣的事情? 從我的測驗來看,它們都能編譯,并且沒有改變代碼的作業方式,但也許我在測驗時跳過了一些重要的東西
uj5u.com熱心網友回復:這兩個都是對process_pointer的明確專業化的宣告和定義,用于T = double,所以他們會以同樣的方式定義同樣的東西。
當你寫出顯式專業化的宣告時,模板引數推導可以被用來填補沒有指定的型別。在你的第一個宣告中,T從T* = double*被推導為double。在你的第二個宣告中,T被明確指定為double,并且沒有進行模板引數推導。
還有第三個等價宣告:
template<>
void widget_11::process_pointer<>(double*) = delete;
//T需要在這里進行推導^^。
而這些空角括號可以直接省略,導致你的第一個宣告。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/314135.html
標籤:
