![](/img/trans.png)
[英]How to call a function from a function pointer of an instantiated object in C++?
[英]How to call a C++ function pointer from C?
我在上一篇文章中成功地最终能够在我的C ++项目中使用PDcurses库中的TUI头。
现在在我班上我包括C头:
#include "tui.h"
tui在C中并且具有菜单的这个定义:
typedef struct
{
char *name; /* item label */
FUNC func; /* (pointer to) function */
char *desc; /* function description */
} menu;
所以在MainView.cpp我有:
void sub0()
{
//domenu(SubMenu0);
}
void sub1()
{
//domenu(SubMenu1);
}
void MainView::showMainMenu()
{
menu MainMenu[] =
{
{ "Users", sub0, "Manage Users" },
{ "Accounts", sub1, "Manage Accounts" },
{ "Items", sub1, "Manage Items" },
{ "Staff", sub1, "Manage Staff" },
{ "", (FUNC)0, "" }
};
startmenu(MainMenu, "Library System 1.0");
}
这是按预期工作的。
问题是我需要在sub0()和sub1()中调用我的类方法。
我尝试为我的类定义C ++方法,尝试用以下代码替换sub0和sub1:
void MainView::sub0()
{
//domenu(SubMenu0);
}
void MainView::sub1()
{
//domenu(SubMenu1);
}
编译器抛出此错误:
error C2440: 'initializing' : cannot convert from 'overloaded-function' to 'FUNC'
None of the functions with this name in scope match the target type
将这些函数指针传递给C代码并摆脱该错误的最佳方法是什么?
谢谢
C ++类对象有一个“this”指针,它被无形地作为类成员函数的第一个参数传递。 这意味着您不能将非静态成员函数用于带有0个参数的C样式函数指针。
所以解决这个问题,你有几个选择。 在告诉你哪一个之前我需要更多细节。
使用boost或tr1或其他一些允许使用this指针绑定成员函数的C ++库。 使用boost,这看起来像:
{ "Users", boost::bind(&MainView::sub0, this), "Manage Users" },
您可以修改代码以传递对类对象的引用以及这些函数指针。 如果是这样,您可以直接在所需对象上调用回调。 看起来你正在处理一个窗口管理器,所以你可能无法进行这种方法所需的更改。
我不认为可以将非静态成员函数作为FUNC指针传递。 由于编译器会将this指针传递给所有非静态成员函数。
你有2个选择:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.