std::string
a に部分文字列が含まれているかどうかを確認する関数があります。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) && ...);
}