時,我有2個功能:我如何控制哪些函數被調用,使用模板
void func(void* Buf);
template<class T> void func(T& val);
我想與數組或一些指針類型的調用會去第一個電話。 雖然調用類型如:int,double,long等 會轉到第二個,這有可能嗎?
現在,所有呼叫都轉到第二個。
時,我有2個功能:我如何控制哪些函數被調用,使用模板
void func(void* Buf);
template<class T> void func(T& val);
我想與數組或一些指針類型的調用會去第一個電話。 雖然調用類型如:int,double,long等 會轉到第二個,這有可能嗎?
現在,所有呼叫都轉到第二個。
可以爲T
是void*
創建的func()
一個專門的版本:
template<> void func(void*& val) {
}
,而不是提供一個模棱兩可的過載。
現在,所有呼叫都轉到第二個。
當然不包括void*
。這是因爲除了void*
之外的每種類型,模板都是更好的匹配。
也將第一個更改爲模板。
template<class T> void func(T*);
這將是更好的匹配指針和數組。
您需要的功能稱爲部分模板專業化。它只適用於課程,所以你需要把你的功能變成這樣的東西:
#include <iostream>
template <class T>
struct funct_t
{
static void exec(T &t)
{
std::cout << "T &" << std::endl;
}
};
template <class T>
struct funct_t<T *> // specialization for pointer like types
{
static void exec(T *t)
{
std::cout << "T *" << std::endl;
}
};
template <class T>
void funct(T t)
{
funct_t<T>::exec(t);
}
int main(int argc, char *argv[])
{
int x = 0;
int y[2];
funct(x);
funct(y);
return 0;
}