std::stringa に部分文字列が含まれているかどうかを確認する関数があります。std::string_viewコピーが行われないように、文字列を として渡します。
bool containsSubstr(std::string_view str, std::string_view substr)
{
return str.find(substr) != std::string::npos;
}
新しい C++17 フォールド式を使用して、文字列に複数の部分文字列が含まれているかどうかを確認する関数を作成したいと考えています。繰り返しますが、s で渡したいと思いstd::string_viewます。
どうやってやるの?
template<typename... Substrs>
bool containsAllSubstr(std::string_view str, Substrs... substrs)
{
return (containsSubstr(str, substrs) && ...);
}
私が知る限り、上記のバージョンは、部分文字列をそれらが入ったタイプとして受け取ります。したがって、 astd::stringがコピーされます。タイプを に修正するにはどうすればよいstd::string_viewですか? 何かのようなもの:
template<> // does not compile
bool containsAllSubstr(std::string_view str, std::string_view... substrs)
{
return (containsSubstr(str, substrs) && ...);
}