函数指针比较



我想写一个函数,根据哪个函数是参数,它的行为应该不同。正如我所看到的,我必须比较参数函数指针和其他函数指针。在同一类中声明的第二个函数。

我想我可以做这样的事情:

void TestClass::testFunction(void inputFunction(functionArgument))
{
if (*inputFunction== &TestClass::classFunction) {
}
}

但显然不是。

我一开始能做到吗?如果可以,怎么做?

必须将指针传递给函数或成员函数,而不是函数本身。

// Accepts a pointer to function
void TestClass::testFunction(void (*requestedFunction)(int argument))
{
if (requestedFunction == &TestClass::classFunction)
...
}
// Accepts a pointer to member function
void TestClass::testFunction(void (TestClass::*requestedFunction)(int argument))
{
if (requestedFunction == &TestClass::classFunction)
...
}

如果函数指针类型有typedef,则可以简化语法。

typedef void (*function_t)(int argument);
// Accepts a pointer to function
void TestClass::testFunction(function_t requestedFunction)
{
if (requestedFunction == &TestClass::classFunction)
...
}
typedef void (TestClass::*member_function_t)(int argument);
// Accepts a pointer to member function
void TestClass::testFunction(member_function_t requestedFunction)
{
if (requestedFunction == &TestClass::classFunction)
...
}

然而,请注意,如果函数是在多个翻译单元中定义的,则比较指向函数的指针可能会中断,而当函数在多个共享库和/或可执行文件中定义时,可能会发生这种情况。

最新更新