我正在尝试创建一个类方法,该方法将函数指针(常规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
}
答案 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
而不是函数指针的函数模板;然后你的来电者可以用更广泛的功能来调用它。