Cześć,
Próbuję napisać swój własny szablon działający na zasadzie std::strchr()
, bo dość dużo tej funkcji używam, a pochodzi z C, więc pewnie nie jest mile widziana w nowoczesnym C++.
Chcę przekazywać tylko dwa argumenty do swojej funkcji: dane do przeszukania i szukany znak:
template <class T, class X >
constexpr bool look_for(T set, X sought) {
for (int it = 0; it != sizeof(set); ++it) {
if (set[it] == sought)
return true;
}
return false;
}
Oczywiście na razie działa to tylko dla c-stringów, bo dla std::string
będzie out of range error. Chciałbym jednak zmienić tę implementację na coś bezpieczniejszego, np. zrobić range-based fora. Tylko mam problem z robieniem zasięgu, bo chyba się nie da tego zrobić z jednej zmiennej set
? np. std::begin(set), std::end(set)
, a z resztą nie wiem czy zasięg by działał dla const char*
. Użycie wyglądałoby przykładowo tak:
if (look_for("abcd", 'a'))
//...
Oczywiście nie byłoby problemu gdybym to napisał jakoś pod std::string
, ale nie uważam, że tworzenie obiektu dla tak małej funkcji jest opłacalne. A gdyby użyć jakichś smart-pointerów? Podpowiecie jak by to lepiej napisać?
Pozdro :P