gpt4 book ai didi

c++ - std::unordered_map
转载 作者:行者123 更新时间:2023-11-30 01:48:21 30 4
gpt4 key购买 nike

这是这个问题的延续 c++ function ptr in unorderer_map, compile time error

我试图使用 std::function 而不是函数指针,并且只有当函数是静态的时我才能插入函数。否则我会得到以下错误

main.cpp:15:11: error: no matching member function for call to 'insert'

  map.insert(std::make_pair("one",&Example::procesString));
#include<string>
#include <unordered_map>
#include<functional>

namespace Test
{
namespace Test
{
class Example
{
public:
Example()
{

map.insert(std::make_pair("one",&Example::procesString));
}
static void procesString(std::string & aString)
//void procesString(std::string & aString) -> compiler error
{

}
static void processStringTwo(std::string & aString)
{

}

std::unordered_map<std::string,std::function<void(std::string&)>> map;
};
}
}

int main()
{
return 0;
}

最佳答案

在这种情况下,您的 std::function 类型是错误的。对于成员函数 Example::processString(std::string&):

std::function<void(Example*, std::string&)>

但是,您可以通过早期绑定(bind)避免这种情况并“吃掉”this 参数:

using std::placeholders;
map.insert(std::make_pair("one", std::bind(&Example::processString, this, _1));

现在唯一未绑定(bind)的参数是字符串引用,因此类型可以保留:

std::function<void(std::string&)>

关于c++ - std::unordered_map<std::string,std::function<void(std::string&) 是否只能容纳静态函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30534456/

30 4 0

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