函数指针作为模板化类函数的输入参数
function pointer as input parameter for templated class function
我得到了一段代码,如下所示:
template <typename T>
class Ordered_list{
public:
Ordered_list(bool (*less_than_function)(const T&, const T&)): less_than(less_than_function){}
private:
bool (*less_than) (const T&, const T&);
};
bool less_than_f(const int& i1, const int& i2){
return i1 < i2;
}
class Collection{
public:
Ordered_list<int> list(less_than_f);
};
代码无法编译,我收到错误:
test.cpp:16: error: 'less_than_f' is not a type
我试图为 Ordered_list 类创建一个对象,我需要在函数指针中传递该对象。我试图用谷歌搜索原因,但没有得到太多。任何人都可以告诉我应该怎么做才能让它工作吗?
class Collection{
public:
Ordered_list<int> list(less_than_f);
};
在这里,您声明了一个带有返回Ordered_list<int>
的函数,并获取一个类型为 less_than_f
的无命名参数(Opss! no type),同时您希望有一个成员" list
"。您需要在构造函数的初始化列表中初始化它(因为Ordered_list
没有默认构造函数)[嗯.. 不确定要初始化C++11 个新选项,但现在在 VC2012 中没有]。
class Collection{
public:
Ordered_list<int> list;
Collection (): list(less_than_f){}
explicit Collection ( bool (*less_than_function)(const int& i1, const int& i2) )
: list(less_than_function) {}
};
您的成员变量未正确声明。它不能像在声明中那样初始化。
试试这个:
class Collection
{
public:
Collection() : list(less_than_f) {}
Ordered_list<int> list;
};
类成员只能在其声明中使用大括号初始化器进行初始化:
Ordered_list<int> list {less_than_f};
或使用=
:
Ordered_list<int> list = less_than_f;
(尽管后者仅因为您的构造函数不explicit
而起作用)。
2011 年之前(在撰写本文时,在大多数可用的编译器中),非静态类成员根本无法在其声明中初始化;需要一个构造函数:
Collection() : list(less_than_f) {}
相关文章:
- 如何通过派生类函数更改基类中的向量
- 库函数需要一个 std::function<void(void)>,如何传入类函数?
- 在类函数中初始化外部作用域变量
- c++ 在非类函数中使用类变量
- SDL_PollEvent() 无法捕获类函数内部SDL_QUIT?
- 从类成员函数到类 C 函数指针的转换
- 如何在模板类函数中分配结构值?
- 有没有办法将重载的类函数绑定到函数对象?
- C ++如何在原始抽象类中创建一个函数,该函数接受派生类的输入
- 启动类函数作为失去引用的线程
- C++调用使用重写函数的父类函数
- 将值传递到另一个类函数在打印时为零
- 计算对类函数的所有调用次数
- 将函数更改为具有设置函数输入变量的方法的类
- 如何初始化可以设置为默认数组并将输入/输出作为数组的类函数?
- 如何为作为雇员类的指针传入的构造函数输入数据
- 如何要求用户在类函数中输入数字
- getline 和在类函数中传递输入流,主表达式错误
- c++中的哪些流函数控制类的输入和输出值的格式
- 函数指针作为模板化类函数的输入参数