我有一个函数来检查 a 是否std::string
包含子字符串。我将字符串传递为std::string_view
,这样就不会发生复制。
bool containsSubstr(std::string_view str, std::string_view substr)
{
return str.find(substr) != std::string::npos;
}
我现在想创建一个函数,使用新的 C++17 折叠表达式来检查字符串是否包含多个子字符串。同样,我想通过std::string_view
s 传递它们。
我怎样才能做到这一点?
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) && ...);
}