函数指针作为类方法声明中的参数

时间:2014-09-12 04:38:55

标签: c++ pointers

我正在尝试创建一个类方法,该方法将函数指针(常规C函数指针,而不是类方法指针)作为参数。我搜索时唯一出现的是如何创建/使用成员函数指针,我不打算这样做。所以这是一个方法,它接受一个返回bool的函数指针,并将两个int作为参数:

class ExampleA
{
public:
  void sort(WHAT_GOES_HERE); // Should it be the same as method definition below?
};

ExampleA::sort(bool (*customSort)(int, int)) // Hopefully this is correct
{
  // Use function pointer
}

有没有办法在方法声明中声明参数而不像使用int参数的方法那样命名它?

class ExampleB
{
public:
  void someFunction(int); // Not named here
};

ExampleB::someFunction(int varName)
{
  // do whatever
}

3 个答案:

答案 0 :(得分:2)

是的!请忽略这个名字。

void sort(bool (*)(int, int));

答案 1 :(得分:2)

bool (*)(int, int)

基本上,删除变量的名称以获取没有变量名的声明。

但是,使用typedef通常会更好:

typedef bool(*custom_sorter)(int, int);

class ExampleA {
public:
  void sort(custom_sorter);
};

ExampleA::sort(custom_sorter customSort) {
  // Use function pointer
}

等同。

由于我个人讨厌声明函数指针的语法,在C ++ 11中我可能会这样做:

template<class T> using type=T;

...

  void sort(type<bool(int,int)>*)

将签名类型放在一起,然后我在它后面添加*以使其成为指针。

但我很奇怪。

答案 2 :(得分:0)

声明应该与定义匹配,因此WHAT_GOES_HERE应该是bool (*customSort)(int, int),并且函数定义也应该指定返回类型void

您可以选择省略名称customSort,但没有区别。

这有点不灵活;考虑使它成为一个接受仿函数或std::function而不是函数指针的函数模板;然后你的来电者可以用更广泛的功能来调用它。