【发布时间】:2020-12-18 12:43:56
【问题描述】:
我有一个简单的谓词:
class less_than
{
int x;
public:
less_than(int i):
x(i)
{
}
bool operator()(int i) const
{
return i < x;
}
};
我有一个看起来像这样的容器:
my_containers<std::list<int>, less_than, int> myCont(list_1, list_2, less_than(11));
- 第一个参数表示
list_1和list_2的类型。 - 第二个参数表示谓词的名称。
- 第三个参数表示
list_1和list_2的项目类型。
我尝试像这样创建我的模板:
template<class Type, class Predicate, class Item_Stored>
class my_containers
{
public:
my_containers(Type &tar_1, Type &tar_2, Predicate felt)
{
ItemList_1 = tar_1;
ItemList_2 = tar_2;
predIcate = felt;
}
my_containers & insert(const Item_Stored put_in)
{
if (!predIcate.operator()(put_in))
{
ItemList_1.insert(ItemList_1.end(), put_in);
}
else
{
ItemList_2.insert(ItemList_2.end(), put_in);
}
return *this;
}
private:
Type ItemList_1;
Type ItemList_2;
Predicate predIcate;
};
每次我使用.insert(x) 时,如果它小于给定的less_than::x,它应该将x 添加到第一个列表中,否则添加到另一个列表中,但它会给我这个错误:
Error C2512 'less_than': no appropriate default constructor available
我该如何解决?
【问题讨论】:
-
ot:
predIcate.operator()(put_in)与predicate(put_in)相同
标签: c++ templates predicate functor c++98