c++ - 类成员函数上的函数指针
问题描述
void Parser::add_func_no_arg(void (Virtual_Machine::*f)(), std::string comand)
{
command_no_arg.push_back(comand);
func_no_arg.push_back(f);
}
void Parser::prepare()
{
//add_func_no_arg(Virtual_Machine::dump,"dump"); it work when i put it in static but i cant do that
add_func_no_arg(vm.clear,"clear"); // ERROR HERE the vm.clear does not fit
}
我有这两个函数可以帮助我创建一个指针数组 func_no_arg; 我不能把虚拟机的函数放在静态的;当一个函数被“陷阱”在一个对象中时,为什么我不能在函数上有一个指针?也许类型是错误的,这里有一些 .hpp :
class Parser {
public:
/***/
void prepare();
void add_func_no_arg(void (Virtual_Machine::*f)(), std::string comand);
private:
Virtual_Machine vm;
std::vector<std::string> command_no_arg;
std::vector<void (Virtual_Machine::*)()> func_no_arg;
/***/
};
class Virtual_Machine {
public:
/***/
void clear();
/***/
}
编译器这样说:
Parser.cpp: In member function ‘void Parser::prepare()’:
Parser.cpp:65:36: error: invalid use of non-static member function ‘void Virtual_Machine::clear()’
add_func_no_arg(vm.clear,"dump");
^
In file included from ../include/Parser.hpp:13,
from Parser.cpp:8:
../include/VM.hpp:23:14: note: declared here
void clear();
解决方案
获取指向成员的指针的语法是&Virtual_Machine::clear
(not ),并且可以使用运算符 (例如)在 的实例上调用这种类型vm.clear
的变量。f
Virtual_Machine
.*
vm.*f()
或者,您可以编写&decltype(vm)::clear
不依赖于类名的 。
推荐阅读
- javascript - TypeError: react__WEBPACK_IMPORTED_MODULE_0___default.a.createContext is not a function (react frontend, node backend)
- python - 使用python在GPU上运行函数
- python - 在python中使用正则表达式检测特定字符串
- java - android 选择其他部分时如何关闭 Spinner 下拉菜单?
- c++ - 在 C++ 中的链表中创建节点
- javascript - 如何在文本周围创建一个旋转的半圆
- python - Python Selenium - 如何传递 UnexpectedAlertPresentException
- html - 悬停时图像的底部边缘出现一条白线
- python - 需要帮助制作莫尔斯电码到文本翻译器 | Python
- php - 使用 php 类使用不同的 ID 将数据存储和分组到数组中的每个人