【发布时间】:2018-03-19 13:05:40
【问题描述】:
我有一个函数来检查 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_views 传递它们。
我该怎么做?
template<typename... Substrs>
bool containsAllSubstr(std::string_view str, Substrs... substrs)
{
return (containsSubstr(str, substrs) && ...);
}
据我所知,上面的版本会将子字符串作为它们进来的类型。所以std::string 将被复制。如何将类型修复为std::string_view?比如:
template<> // does not compile
bool containsAllSubstr(std::string_view str, std::string_view... substrs)
{
return (containsSubstr(str, substrs) && ...);
}
【问题讨论】:
标签: c++ c++17 fold-expression