C++ 如何将谓词函数作为模板参数传递?
我有一个简单的谓词:C++ 如何将谓词函数作为模板参数传递?,c++,templates,predicate,functor,c++98,C++,Templates,Predicate,Functor,C++98,我有一个简单的谓词: class小于 { int x; 公众: 小于(整数i): 十(一) { } 布尔运算符()(int i)常量 { 返回i
class小于
{
int x;
公众:
小于(整数i):
十(一)
{
}
布尔运算符()(int i)常量
{
返回i
我有一个容器,看起来像这样:
my_容器myCont(列表1,列表2,小于(11));
- 第一个参数表示
和list_1
的类型list_2
- 第二个参数表示谓词的名称
- 第三个参数表示
和list_1
的项目类型list_2
模板
将我的容器分类
{
公众:
my_容器(类型和tar_1、类型和tar_2、谓词毡)
{
ItemList_1=tar_1;
ItemList_2=tar_2;
谓词=感觉;
}
我的容器和插入(存储的常量项放入)
{
if(!predIcate.operator()(put_in))
{
ItemList_1.insert(ItemList_1.end(),put_in);
}
其他的
{
ItemList_2.insert(ItemList_2.end(),put_in);
}
归还*这个;
}
私人:
输入ItemList_1;
类型ItemList_2;
谓词;
};
每次我使用.insert(x)
,如果x
小于给定的小于::x,则应将其添加到第一个列表中,否则将添加到另一个列表中,但会出现以下错误:
错误C2512“小于”:没有合适的默认构造函数可用
如何修复它?您的构造函数需要每个成员的默认构造函数。改为使用成员初始值设定项列表
my_容器(Type&tar_1,Type&tar_2,谓词feel)
:ItemList_1(tar_1),ItemList_2(tar_2),谓词(feel){}
请参阅:。您的构造函数需要每个成员的默认构造函数。改为使用成员初始值设定项列表
my_容器(Type&tar_1,Type&tar_2,谓词feel)
:ItemList_1(tar_1),ItemList_2(tar_2),谓词(feel){}
请参阅:。首先:
- 尝试将构造函数定义为总是显式的
- 然后
x.operator()()
与x()
相同
- 并始终使用成员初始化列表:
结构A
{
双m_-var;
A(const-double-var):m_-var(var){}
};
不是:
结构A
{
双m_-var;
A(常数双变量)
{
m_var=var;
}
};
你的问题就会解决。因为您的less\u than
类没有任何默认构造函数,并且在您的my\u容器
构造函数中,您必须显式初始化谓词
成员,否则尝试使用默认构造函数初始化,因为默认构造函数没有,并且编译失败
因此,您需要在成员初始化列表中初始化谓词
,或者为小于
类定义默认构造函数。首先:
- 尝试将构造函数定义为总是显式的
- 然后
与x.operator()()
相同x()
- 并始终使用成员初始化列表:
less\u than
类没有任何默认构造函数,并且在您的my\u容器
构造函数中,您必须显式初始化谓词
成员,否则尝试使用默认构造函数初始化,因为默认构造函数没有,并且编译失败
因此,您需要在成员初始化列表中初始化谓词
,或者为小于类定义默认构造函数。ot:谓词。运算符()(放入)
与谓词(放入)
ot:谓词。运算符()(放入)
与谓词(放入)