假设我们有一个类A
,它有几个具有相同函数签名的setter函数,如以下代码:
class A
{
public:
void setter1(int whatever)
{
// set Something ...
}
void setter2(int whatever)
{
// set Something ...
}
void setter3(int whatever)
{
// set Something ...
}
};
字符串
另一个类B
有一个类A
的对象。另一个类C
有一个B
的对象。在C
中,我试图声明A
的函数指针列表,并试图通过B
的对象调用它们。
下面是我如何调用的例子:
class B
{
public:
A objectA;
};
class C
{
C()
{
for (auto fnc: fncList)
{
someFunc();
}
}
void someFunc()
{
auto setterFnc = fncList .front();
fncList.pop_front();
objectB.objectA. // --> here I can't find the right syntax to call the function;
}
std::list<void (A::*)(int)> fncList = {&A::setter1, &A::setter2, A::setter2};
};
型
是否有其他方法来声明函数指针列表,以便我可以从类A
的任何函数通过B
中的对象从C
使用它?
2条答案
按热度按时间brqmpdu11#
在类B的某个函数中,所有这些类A的函数将被一个接一个地调用。
是的,可以,如下所示。你必须有一个对象或一个指向你的类类型的对象的指针,以便使用指向这些成员函数的指针来调用成员函数。
C++17
在这里,你可以使用
std::invoke
来使用指向成员函数的指针,以使代码 * 更具可读性 *。字符串
Demo的
C++17之前
在这里,我们将调用
std::invoke(ptr, a, i)
替换为:型
Demo的
daolsyd02#
是的,这是可能的。虽然语法很恶心。
字符串
这声明了一个核心常量数组
setters_of_a
,指向A
类型函数的成员指针,该函数接受int
并返回void
。型
这将调用对象
a
上指向成员setter
的指针所引用的成员函数。型
Demo on Compiler Explorer