我正在尝试使用地图存储要在特定时间调用的函数。
typedef std::function<void(rapidjson::Document&)> Callback;
std::map<std::string, Callback> _callbackDict = {
{ "foo", HandleFoo },
{ "bar", HandleBar },
};
当我尝试存储它们时会导致错误:
error: could not convert '{{"foo", ((FooBar*)this)->FooBar::HandleFoo}, {"bar", ((FooBar*)this)->FooBar::HandleBar}}' from '<brace-enclosed initializer list>' to 'std::map<std::__cxx11::basic_string<char>, std::function<void(int, int)> >'
#pragma once
#include <map>
#include <iostream>
#include <functional>
typedef std::function<void(int, int)> Callback;
class FooBar
{
private:
std::map<std::string, Callback> _callbackDict = {
{ "foo", HandleFoo },
{ "bar", HandleBar },
};
public:
FooBar();
void HandleFoo(int a, int b);
void HandleBar(int a, int b);
~FooBar();
};
答案 0 :(得分:3)
以下代码编译:
namespace rapidjson { struct Document; }
void HandleFoo(rapidjson::Document&) {}
void HandleBar(rapidjson::Document&) {}
typedef std::function<void(rapidjson::Document&)> Callback;
std::map<std::string, Callback> _callbackDict = {
{ "foo", HandleFoo },
{ "bar", HandleBar },
};
请注意,FooBar::Run()
与您的问题无关,也不需要包含在您的问题中。
答案 1 :(得分:-1)
仍然不清楚您正在尝试做什么。用于编译代码的最小更改已在注释中给出;使你的职能static
:
namespace rapidjson { struct Document; }
typedef std::function<void(int, int)> Callback;
class FooBar
{
std::map<std::string, Callback> _callbackDict = {
{ "foo", HandleFoo },
{ "bar", HandleBar },
};
public:
static void HandleFoo(int a, int b);
static void HandleBar(int a, int b);
};
但你真的需要得到good C++ book并阅读它;这应该是一个Q-and-A网站,而不是帮助我使用我的代码。