gpt4 book ai didi

c++ - 指向虚函数的指针

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:36:51 27 4
gpt4 key购买 nike

所以我现在有点进退两难。我想做一个函数指针,但我想把它做成一个虚函数。不一定是虚函数本身,而是派生函数。我试着只制作指针,但函数需要是静态的。当我尝试创建静态虚函数时,编译器对我大喊大叫。我也不想使函数指针类特定,因此可以想象其他类可以使用该指针。这是我在伪代码中的意思:

class C
{
public:
virtual void something();
};

class B : public C
{
public:
void something();
};

class D
{
public:
void something();
};


int main()
{
void(*pointer)();
B b;
D d;
pointer = b.something.
pointer();
pointer = d.something;
pointer()
}

Something 不是静态方法,但我希望指针能够指向它。指针也可以指向其他也不是静态的类方法。有什么我可以做的吗?

编辑我终于能够弄清楚如何做到这一点。我不得不使用 std::function。这也应该只适用于常规成员函数,不一定是虚拟成员函数。这是它的样子:

class A
{
public:
virtual void something(int i);
};
class B
{
virtual void somethingElse(int i);
}
//This isn't needed, it just saves typing if you have multiple pointers
typedef std::function<void(int)> functionType
functionType* pointer;

int main()
{
B b;
A a;
pointer = std::bind(&A::something,&a,std::placeholders::_1);
pointer(1)
pointer = std::bind(&B::somethingElse,&b,std::placeholders::_1);
pointer(4)
}

互联网上有很多关于 std::bind 的内容,所以如果您好奇,可以阅读一下。我发现这特别有用,因为它与我的解决方案非常相似。 std::function to member function感谢所有帮助过的人。

最佳答案

您将无法将指向成员函数的指针分配给普通函数指针:函数指针不接受任何额外参数,而成员函数接受隐式 this。指针作为参数。您可能想使用 std::function<...> , 虽然:

std::function<void()> pointer;
B b;
pointer = std::bind(&C::something, &b);
pointer();
D d;
pointer = std::bind(&c::something, &d);
pointer();

你可以避免使用 std::function<...>如果你传递一个指向对象的指针和一个围绕 的合适的成员函数指针,则存在公共(public)基类(虽然上面的代码使用缺少的继承,下面的代码要求 C 是一个基类的 D ):

void (C::*member)() = &C::something;
C* c = &b;
(c->*member)(); // calls b.something() using B::something()
c = &d;
(c->*member)(); // calls d.something() using D::something()

C++ 没有使用 &object.member 的符号获取易于绑定(bind)的成员函数的地址。 ...而且,即使是这样,它的类型也不会是 void(*)()要么。

关于c++ - 指向虚函数的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21030851/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com