2009-09-11 56 views
6

作爲後續this question:我需要這樣一類函數決定:模板類函數T:如何找出T是否是指針?

template< typename T > bool Class::Fun <T*> (T& variable) {...} 

T是否是一個指針或沒有。

在上面引用的問題中,答案是使用部分模板專業化。據我發現,這是不可能的類功能。這是真的?如果是這樣,還有另一種發現T是否是指針的方法嗎?

+1

@iammilind:你會注意到,這個問題已鏈接到你標記它的和重複的問題它也已經在那裏表明了它在哪些方面是不同的。請刪除「標記爲重複」。 – fuenfundachtzig 2016-03-17 15:11:54

回答

22

不需要專門的成員函數。在那個答案中使用了獨立結構。你仍然可以在類成員函數中使用它。

// stand-alone helper struct 
template<typename T> 
struct is_pointer { static const bool value = false; };  
template<typename T> 
struct is_pointer<T*> { static const bool value = true; }; 

// your class 
class Class{ 
public: 
template<typename T> 
void Fun(T& variable) { 
    std::cout << "is it a pointer? " << is_pointer<T>::value << std::endl; 
} 
}; 

在另一方面,你可以超載功能:

class Class { 
public: 
template<typename T> 
void Fun(T& variable) { 
    std::cout << "is it not a pointer! " << std::endl; 
} 
template<typename T> 
void Fun(T*& variable) { 
    std::cout << "is it a pointer! " << std::endl; 
} 
}; 
+2

你已經展示了兩個很好的方法來實現這一點。不幸的是,我只有一個投票給你。 ':)' – sbi 2009-09-11 19:42:38

+0

謝謝你的稱讚,但我會說我已經顯示了通常/標準的方式來實現這一點。 – 2009-09-11 19:50:27

+2

這並不意味着他們不會很好。 ':)' – sbi 2009-09-12 13:56:10