关于c++使用toml plusplus(俗称toml++)的使用(2)

链接

toml 完整版读取与写入

toml读取

toml写入

目标

  • 目标:数组表的写入

  • 目标文件内容如下

[NET_INTERFACE]
bool = false
integer = 1234567890
string = 'this is a string'

[[fruit]]
kilograms = 2
name = 'banana'

[[fruit]]
kilograms = 1
name = 'apple'

[[fruit]]
kilograms = 3
name = 'blueberry'

关键代码

NetInterfaceConfigPropertyName propertyName;
toml::table rootNode{};
tableNodeInsert<std::string>(rootNode, "string", "this is a string");
tableNodeInsert<bool>(rootNode, "bool", false);
tableNodeInsert<int64_t>(rootNode, "integer", 1234567890);

toml::table netInterfaceNode{};
/// 创建[NET_INTERFACE]
netInterfaceNode.insert_or_assign(propertyName.m_tableName, rootNode);

/// 下一是一个数组的写入
 
{
	/// 定义了水果信息
	struct FruitInfo
	{
		/// 水果的名称
		std::string     m_name{""};
		/// 水果的重量
		int64_t         m_kilograms{0};
	};

	/// <key-水果的名称,value-水果信息>
	using HashFruitInfo = std::unordered_map<std::string, FruitInfo>;

	HashFruitInfo fruitInfoHash{{"apple", {"apple", 1}}, {"banana", {"banana", 2}}, {"blueberry", {"blueberry", 3}}};


	toml::array tmpArr;
	// for(auto& [key, value] : tmpArr)
	for (HashFruitInfo::iterator it = fruitInfoHash.begin(); it != fruitInfoHash.end(); ++ it)
	{
		toml::table tblTmp{};
		tableNodeInsert<std::string>(tblTmp, "name", it->first);
		tableNodeInsert<int64_t>(tblTmp, "kilograms", it->second.m_kilograms);

		tmpArr.insert(tmpArr.begin(), tblTmp);
	}

	/// 将数组中的内容
	netInterfaceNode.insert_or_assign("fruit", tmpArr);
}


/// 使用流打开文件
std::ofstream tomlFile(std::string{"example.toml"}, std::ios::out | std::ios::trunc);
if (tomlFile.is_open())
{
	// 使用 toml++ 的内置方法将 TOML 值写入文件
	tomlFile << netInterfaceNode;
	tomlFile.close();
}
else
{
	/// TODO
}
posted @ 2024-08-18 23:16  mohist  阅读(14)  评论(0编辑  收藏  举报