来自void的C ++ Casting

时间:2018-04-11 23:24:03

标签: c++ casting

我有一个无效的功能。我传入一个对象(调用是MyClass)。该函数用于从MyClass调用方法并返回其输出。所以,我正在将对象转换为自身(它作为void传递)

MyClass* func = dynamic_cast<MyClass*>(func1)

但是,当我尝试从MyClass(func)调用一个方法时,我得到了这个错误......

cannot convert 'MyClass::method' from type 'int (MyClass::)()' to type 'int'

我的猜测是我使用错误的方法来转换对象。那是错误告诉我的吗?

非常感谢您指出的任何文件。

EDIT 这是我的实际功能

int call_method(void *func1)
{
    UserStatistics* func = dynamic_cast<UserStatistics*>(func1)
    return func->numCurrUsers;
}

我对UserStatistics类的唯一了解是它有一些返回int的虚方法(如numCurrUsers)。我实际上无法访问类本身,只是有关如何访问它的文档。

2 个答案:

答案 0 :(得分:3)

  

但是,当我尝试从MyClass(func)调用一个方法时,我得到了这个错误......

cannot convert 'MyClass::method' from type 'int (MyClass::)()' to type 'int'
     

我的猜测是我使用错误的方法来转换对象。那是错误告诉我的吗?

没有。该错误消息告诉您,您正在尝试返回指向int的指针指向方法。这是因为这句话:

  

[UserStatistics]有一些虚拟方法(如numCurrUsers)返回int

这意味着你需要调用方法并返回它返回的值,而不是返回方法本身。

这与演员本身无关。是的,你使用错误的演员。您需要使用static_cast代替dynamic_cast

试试这个:

int call_method(void *func1)
{
    UserStatistics* func = static_cast<UserStatistics*>(func1)
    return func->numCurrUsers();
}

答案 1 :(得分:0)

只有在具有类的多态实现时才使用dynamic_cast。通常,当基类指针保存派生类对象的地址时,可以dynamic_cast基指针获取派生类对象的地址。

在您的情况下,您需要使用static_cast代替:

 static_cast<MyClass*>(func1);