gpt4 book ai didi

c++ - 将初始化列表传递给继承的映射

转载 作者:行者123 更新时间:2023-11-30 03:35:22 25 4
gpt4 key购买 nike

我正在尝试初始化类 FileList,它将 std::map 扩展为具有 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::container 派生。

最佳答案

派生类中的构造函数默认不继承自基类,需要手动继承。

class FileList : public std::map<std::string, FileInfo> 
{
using std::map<std::string, FileInfo>::map;
};

请注意,从 STL 容器继承不是一个好主意。

最好只做:

using FileList = std::map<std::string, FileInfo>;

关于c++ - 将初始化列表传递给继承的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41342247/

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