gpt4 book ai didi

具有类成员变量的 C++ 函数指针映射

转载 作者:行者123 更新时间:2023-11-30 02:10:20 24 4
gpt4 key购买 nike

我正在尝试制作一个 STL 映射,键为“KEYWORD”,值为“类成员函数”,但它没有被编译。以下是代码。谁能告诉我出了什么问题。类成员函数不是静态的。

typedef void (RemoteHostManager::*CmdHandlerPtr)(char *);
typedef std::map<char *,CmdHandlerPtr> CommandHandlerSet;
typedef std::map<char *,CmdHandlerPtr>::iterator CommandHandlerSetItr;

void RemoteHostManager::InitializeCmdHandlerMap()
{
m_CommandSet["HELP"] = &RemoteHostManager::usage;
m_CommandSet["CONNECT"] = &RemoteHostManager::Connect;
m_CommandSet["READ"] = &RemoteHostManager::Read;
m_CommandSet["WRITE"] = &RemoteHostManager::Write;
m_CommandSet["STOP"] = &RemoteHostManager::Stop;
m_CommandSet["START"] = &RemoteHostManager::Start;
}

错误如下:

RemoteHostManager.cpp: In member function `void
RemoteHostManager::InitializeCmdHandlerMap()':
RemoteHostManager.cpp:14: no match for `std::_Rb_tree_iterator<std::pair<const
std::string, void (RemoteHostManager::*)(char*)>, std::pair<const
std::string, void (RemoteHostManager::*)(char*)>&, std::pair<const
std::string, void (RemoteHostManager::*)(char*)>*>& [const char[5]]'
operator
//similar error for other assignments!

最佳答案

typedef std::map<char *,CmdHandlerPtr> CommandHandlerSet;
typedef std::map<char *,CmdHandlerPtr>::iterator CommandHandlerSetItr;

首先让它成为const char*,或者更好的std::string:

typedef std::map<std::string,CmdHandlerPtr> CommandHandlerSet;
typedef std::map<std::string,CmdHandlerPtr>::iterator CommandHandlerSetItr;

请注意,您的所有成员函数都应与 CmdHandlerPtr 的类型相匹配。即参数类型必须是char*,返回类型必须是void

使用 map 时,需要一个RemoteHostManager类型的实例:

RemoteHostManager instance;
string key;
//...
(instance.*m_CommandSet[key])(param);

关于具有类成员变量的 C++ 函数指针映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4721188/

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