我寫了一個模板,只有當一個struct
,class
重載了bool operator==
否則編譯器錯誤會拿出一個有效的使用,模板如何呈現數據類型?
namespace atn {
template <typename T>
bool find(std::vector<T>& cont, T find) {
for(std::vector<T>::iterator it = cont.begin(); it != cont.end(); ++it) {
if((*it) == find)
return true;
}
return false;
}
};
所以罰款是好的,例如:
struct sPlayer {
u_int idPlayer;
sPlayer() : idPlayer(0) {};
bool operator==(const sPlayer& ref) const {
return ref.idPlayer == this->idPlayer;
};
};
int _tmain(int argc, _TCHAR* argv[]) {
std::vector<sPlayer>a;
sPlayer player;
player.idPlayer = 5;
a.push_back(player);
if(atn::find(a, player)){
std::cout << "Found" << std::endl;
}
return 0;
}
事情是,如果我這樣使用它:
vector<int>hold;
if(atn::find(hold, 4))
我迷失在這個部分,模板tes假設通過傳遞的第二個參數的值在vector<T>
處分配的T的類型?或者它會從傳遞的向量引用的類型中假設?