Ich versuche, eine Vorlagefunktion zu schreiben, um wahr zurückzugeben, wenn ein bestimmtes Objekt bereits in einem Container vorhanden ist. Hier bin ich, und ich weiß nicht, wo ich von hier aus hingehen soll.Traverse Generic STL Container auf Existenz zu prüfen
template <typename BeginningIter, typename EndingIter, typename T>
static bool itemExists(BeginningIter bit, EndingIter eit, const T &searchTerm)
{
if ((bit == nullptr) || (eit == nullptr)) {
return false;
}
static_assert(std::is_same<std::decay(decltype(*bit)), std::decay(searchTerm)>::value, "Invalid");
for (auto iter = bit; iter != eit; iter++) {
if (*iter == searchTerm) {
return true;
}
}
return false;
}
ich aber auch versuchen std :: enable_if in der Vorlage Spezifikation Linie zu verwenden, aber ich wusste nicht, einen Weg, den Typ eines dereferenced BeginningIter Begriff zu bekommen. Ich habe den std :: decay für den Fall verwendet, dass er auf einen Referenztyp zeigt. Wenn jedoch zu kompilieren versuchen, erhalte ich
generalutilities.h: In static member function ‘static bool GeneralUtilities::itemExists(BeginningIter, EndingIter, const T&)’:
generalutilities.h:148:77: error: template argument 1 is invalid
if (!std::is_same<std::decay(decltype(*bit)), std::decay(searchTerm)>::value) {
^
generalutilities.h:148:77: error: template argument 2 is invalid
"* Ich versuche, eine Vorlagefunktion zu schreiben, um wahr zurückzugeben, wenn ein bestimmtes Objekt bereits in einem Container vorhanden ist. *" FYI: Wir haben bereits eine davon. [Es heißt 'finden'] (http://en.cppreference.com/w/cpp/algorithm/find). Und es ist viel besser als Ihres, da es den Ort zurückgibt, an dem es gefunden wurde, und es ist nicht erforderlich, dass der Typ eines Elements im Container genau der Typ ist, nach dem Sie suchen. –
Ja, ich weiß über finden. Ich versuche gerade, zehn Teller zu lernen. –
'if (! Std :: is_same <...> :: Wert) {std :: cout <<" Nicht das gleiche "<< std :: endl; } 'Das sollte wahrscheinlich eine' static_assert' sein – KABoissonneault