【问题标题】:Is it possible to call a method pointer with a void* pointer to the object是否可以使用指向对象的 void* 指针调用方法指针
【发布时间】:2021-02-24 11:03:45
【问题描述】:

我有一个结构,它包含一个指向对象的 void* 指针和一个指向该对象类的某些方法的函数指针。我没有(也不能)拥有该对象类的信息,所以我需要一个 void*。我试图通过这个来调用该方法:

object->*function(args) 

当我尝试用 msvc 编译它时,我得到两个错误:C2296 和 C2297 C2296 声明,“->”无效,因为左操作数无效,因为它的类型为“void” C2297 状态相同,但使用正确的操作数和类型“bool”

【问题讨论】:

  • 不知何故“我没有(也不能)拥有该对象类的信息,”不适合拥有成员函数指针。如果你有一个成员函数指针,你需要知道对象的类型是什么
  • 换句话说:function 来自哪里?如果您愿意,可以从成员函数指针推断类型,但正如答案中指出的那样,它必须适合对象的实际类型
  • 在不知道它所属的类的类型及其定义的情况下,您不能拥有指向成员的指针,因此您要么没有这样的指针,要么可以(并且确实)有关于班级的信息。
  • 向我们展示这个类,而不是用英语描述它。
  • 我认为您可以使用虚函数作为您正在做的事情的简单替代方案。除非您提供更多信息,否则我无法确定。

标签: c++


【解决方案1】:

是否可以使用指向对象的 void* 指针调用方法指针

不,不是。更一般地说,您根本无法通过指向 void 的指针来间接实现。

指向 void 的指针必须转换为指向与指向成员函数的指针兼容的对象类型的指针。

我没有(也不能)拥有该对象类的信息

如果您知道对象的类型与指向成员函数的指针兼容,那么您应该知道该类型是什么。如果你不知道类型,那么你不知道它是兼容的,因此不能调用指向成员函数的指针。

【讨论】:

    猜你喜欢
    • 2019-03-28
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    • 2013-10-24
    • 2021-07-19
    • 2016-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多