1
我试图初始化类FileList
,延伸std::map
为FileInfo
对象与地图的特定初始化列表的集合,但我收到以下错误:传递初始化列表到继承的地图
Error C2440 'initializing': cannot convert from 'initializer list' to 'FileList'
#include <string>
#include <map>
class FileInfo
{
public:
FileInfo(const std::string &name) : mName(name) { }
std::string operator()() const
{
return mName;
}
private:
std::string mName;
};
class FileList : public std::map<std::string, FileInfo> { };
int main(int argc, char *argv[])
{
FileInfo f1 = { "f1" };
FileInfo f2 = { "f2" };
FileList fileList{ { f1(), f1 }, { f2(), f2 } };
return 0;
}
我没有找到为什么这会失败,因为FileList
这完全是一个std::map
。
是否有可能将初始化程序列表传递给由FileList
继承的std::map
,而无需像以下那样手动插入每个对象?
FileList fileList;
fileList[f1()] = f1;
fileList[f2()] = f2;
编辑:
由于@DeiDei说,不建议从一个std派生::容器。
构造函数默认情况下不继承。查找继承构造函数。另外,请不要从std ::容器派生。它不会工作得很好。 – DeiDei
如果你想让这个类型成为一个地图,你可以使用FileList = std :: map;'。 –
@DeiDei我不知道它不推荐扩展STL容器,现在我发现了主要原因:“他没有从std :: vector publicitly继承的主要原因是没有虚拟析构函数”[http:// stackoverflow.com/a/4357417/4806882](http://stackoverflow.com/a/4357417/4806882) –