【发布时间】:2021-08-20 04:41:49
【问题描述】:
基本上我需要模板函数,它将容器的大小与某个常数进行比较。所以我需要制作容器的 std::vector 并检查谓词 compSize 是否为真。
template < int x, class Container >
bool compSize(Container cont)
{
return x == cont.size();
}
template < int x, class ...Container >
bool compSizeMult(Container ...conts)
{
std::vector< Container > cvector{ conts... };
return std::all_of(cvector.cbegin(), cvector.cend(), compSize< x, Container >);
}
但是编译器说,那个参数包没有展开
cvector{ 继续... };
我也想使用 compSizeMult 作为 std::sort 的比较器并制作类似
int main()
{
std::vector< std::vector< int > > vec{{1}, {2}, {3}, {0}, {0}};
std::sort(vec.begin(), vec.end(), compSizeMult< 0, std::vector< int > >);
}
这就是为什么函数应该接受多个参数的原因。我不能在这个任务中使用循环和 lambda,只能使用标准算法
【问题讨论】:
-
标准规定允许在初始化列表中使用可变参数模板。其他答案包含代码 sn-ps,其中以这种方式使用可变参数模板。但是......它只是不起作用
-
我刚刚意识到我不能使用这个函数作为比较器
标签: c++ templates vector variadic-templates parameter-pack