がオーバーロードされた場合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))
この部分で迷子になりました。テンプレートは、vector<T>
渡された 2 番目のパラメーターの値によって割り当てられる T の型を想定していますか? または、渡されたベクトル参照のタイプから推測しますか?