作为this questionçš„åŽç»è¡ŒåŠ¨ï¼šæˆ‘需è¦åœ¨è¿™æ ·çš„类函数ä¸åšå‡ºå†³å®šï¼š
template< typename T > bool Class::Fun <T*> ( T& variable ) {...}
T是å¦æ˜¯æŒ‡é’ˆã€‚
在上é¢å¼•ç”¨çš„问题ä¸ï¼Œç”案是使用部分模æ¿ä¸“业化。æ®æˆ‘所知,这对于类功能是ä¸å¯èƒ½çš„ã€‚è¿™æ˜¯çœŸçš„ï¼Ÿå¦‚æžœæ˜¯è¿™æ ·ï¼Œæ˜¯å¦æœ‰å¦ä¸€ç§æ–¹æ³•å¯ä»¥æ‰¾å‡ºT是å¦ä¸ºæŒ‡é’ˆï¼Ÿ
ç”案 0 :(得分: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;
}
};
ç”案 1 :(得分:8)
看看boost::is_pointer。
ç”案 2 :(得分:3)
与Boost.TypeTraits一起查看Boost EnableIf。