我尝试使用相应的文字和通话功能创建Code
的地图。我收到编译错误,我无法弄清楚我的代码std::map
初始化有什么问题。有人可以解释一下我做错了什么,我该如何解决这个问题:
#include <iostream>
#include <vector>
#include <string>
#include <functional>
#include <utility>
#include <map>
namespace mvs
{
enum Code
{
Code0 = -1,
Code1 = -2,
Code2 = 1,
CodeCount
};
}
class CompositeFile
{
public:
CompositeFile(std::string const& name) : name_(name) {}
template <typename T>
long readEx(mvs::Code code, std::vector<T>& buffer)
{
return 0;
}
std::string readString(mvs::Code code)
{
return {};
}
private:
std::string name_;
};
namespace mh
{
class CompositeFileEx : public CompositeFile
{
public:
CompositeFileEx(std::string const& name) : CompositeFile(name) {}
template <typename T>
std::string get(mvs::Code code)
{
std::vector<T> buffer;
readEx(code, buffer);
return {};
}
private:
typedef std::pair<std::string, std::function<std::string(mvs::Code)> > pair_type;
**std::map<mvs::Code, pair_type> map_ =
{
{ mvs::Code1, { "Code1", get<char>(mvs::Code1) } }
};**
};
template <>
std::string CompositeFileEx::get<char>(mvs::Code code)
{
return readString( code );
}
}
int main(int argc, char** argv)
{
return 0;
}
答案 0 :(得分:0)
仔细查看你的配对是如何定义的:
std::pair<std::string, std::function<std::string(mvs::Code)>>
第二个元素是std::function<std::string(mvs::Code)>
。在构造对象时,您应该发送一个可调用对象作为对的第二个参数。
表达式get<char>(mvs::Code1)
的类型不是一个可调用的对象,它将代码作为参数并返回一个字符串。表达式直接生成一个字符串。
要解决此问题,您应该发送一个lambda函数,该函数将代码作为参数,并返回get
的结果