Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将谓词函数作为模板参数传递?_C++_Templates_Predicate_Functor_C++98 - Fatal编程技术网

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()
    相同
  • 并始终使用成员初始化列表:
结构A { 双m_-var; A(const-double-var):m_-var(var){} }; 不是

结构A { 双m_-var; A(常数双变量) { m_var=var; } }; 你的问题就会解决。因为您的
less\u than
类没有任何默认构造函数,并且在您的
my\u容器
构造函数中,您必须显式初始化
谓词
成员,否则尝试使用默认构造函数初始化,因为默认构造函数没有,并且编译失败

因此,您需要在成员初始化列表中初始化
谓词
,或者为
小于
类定义默认构造函数。

ot:
谓词。运算符()(放入)
谓词(放入)
ot:
谓词。运算符()(放入)
谓词(放入)