作爲後續this question:我需要這樣一類函數決定:模板類函數T:如何找出T是否是指針?
template< typename T > bool Class::Fun <T*> (T& variable) {...}
T是否是一個指針或沒有。
在上面引用的問題中,答案是使用部分模板專業化。據我發現,這是不可能的類功能。這是真的?如果是這樣,還有另一種發現T是否是指針的方法嗎?
作爲後續this question:我需要這樣一類函數決定:模板類函數T:如何找出T是否是指針?
template< typename T > bool Class::Fun <T*> (T& variable) {...}
T是否是一個指針或沒有。
在上面引用的問題中,答案是使用部分模板專業化。據我發現,這是不可能的類功能。這是真的?如果是這樣,還有另一種發現T是否是指針的方法嗎?
不需要專門的成員函數。在那個答案中使用了獨立結構。你仍然可以在類成員函數中使用它。
// 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;
}
};
@iammilind:你會注意到,這個問題已鏈接到你標記它的和重複的問題它也已經在那裏表明了它在哪些方面是不同的。請刪除「標記爲重複」。 – fuenfundachtzig 2016-03-17 15:11:54