首页 > 编程语言 >关于c++使用toml plusplus(俗称toml++)的使用(3)

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

时间:2024-08-18 23:48:38浏览次数:12  
标签:insert arr plusplus c++ netInterfaceNode toml table arrayInsert

链接

toml读取

toml写入

目标: 数组的写入

文件内容

[NET_INTERFACE]
bool = false
bool_arr = [ false, false ]
complex_arr = [ false, '456', 123 ]
integer = 1234567890
integer_arr = [ 1, 0 ]
str_arr = [ '1', '0' ]
string = 'this is a string'

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

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

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

关键代码

  • arrayInsert 函数定义
/// @brief 数组的插入
/// @tparam T 
/// @param arr 
/// @param value 
template<typename T>
static void arrayInsert(toml::array& arr, const T& value)
{
    arr.insert(arr.begin(), toml::value<T>(value));
}

写文件代码

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);
}

/// 数组的写入
{
	/// 整数数组
	toml::array tmpArrInt;
	/// 字符串数组
	toml::array tmpArrStr;
	/// bool数组
	toml::array tmpArrBool;

	for (int index = 0; index < 2; ++ index)
	{
		arrayInsert<int64_t>(tmpArrInt, index);
		arrayInsert<std::string>(tmpArrStr, std::to_string(index));
		arrayInsert<bool>(tmpArrBool, false);
	}

	netInterfaceNode[propertyName.m_tableName].as_table()->insert_or_assign("integer_arr", tmpArrInt);
	netInterfaceNode[propertyName.m_tableName].as_table()->insert_or_assign("str_arr", tmpArrStr);
	netInterfaceNode[propertyName.m_tableName].as_table()->insert_or_assign("bool_arr", tmpArrBool);


	/// 混合数组
	toml::array tmpArrComplex;
	arrayInsert<int64_t>(tmpArrComplex, 123);
	arrayInsert<std::string>(tmpArrComplex, "456");
	arrayInsert<bool>(tmpArrComplex, false);

	netInterfaceNode[propertyName.m_tableName].as_table()->insert_or_assign("complex_arr", tmpArrComplex);

}


/// 使用流打开文件
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
}

数组写入的关键代码

        /// 数组的写入
        {
            /// 整数数组
            toml::array tmpArrInt;
            /// 字符串数组
            toml::array tmpArrStr;
            /// bool数组
            toml::array tmpArrBool;

            for (int index = 0; index < 2; ++ index)
            {
                arrayInsert<int64_t>(tmpArrInt, index);
                arrayInsert<std::string>(tmpArrStr, std::to_string(index));
                arrayInsert<bool>(tmpArrBool, false);
            }

            netInterfaceNode[propertyName.m_tableName].as_table()->insert_or_assign("integer_arr", tmpArrInt);
            netInterfaceNode[propertyName.m_tableName].as_table()->insert_or_assign("str_arr", tmpArrStr);
            netInterfaceNode[propertyName.m_tableName].as_table()->insert_or_assign("bool_arr", tmpArrBool);


            /// 混合数组
            toml::array tmpArrComplex;
            arrayInsert<int64_t>(tmpArrComplex, 123);
            arrayInsert<std::string>(tmpArrComplex, "456");
            arrayInsert<bool>(tmpArrComplex, false);

            netInterfaceNode[propertyName.m_tableName].as_table()->insert_or_assign("complex_arr", tmpArrComplex);

        }

标签:insert,arr,plusplus,c++,netInterfaceNode,toml,table,arrayInsert
From: https://www.cnblogs.com/pandamohist/p/18366396

相关文章

  • C++——new对象
    new对象与之前C的"类对象"方式有所不同,"类对象"方式并不会调用构造函数和析构函数,而new对象则会调用两个函数,释放该空间时用delete。数组申请int类型的数组#define_CRT_SECURE_NO_WARNINGS#include<iostream>usingnamespacestd;intmain(){ int*a=newint[10];......
  • C++中的多线程编程和锁机制
    二、多线程、锁2.1C语言线程库pthread(POSIXthreads)2.2.1线程创建pthread_create#include<pthread.h>pthread_tthread;ThreadDataargs={1,"Hellofromparameterizedthread"};intresult=pthread_create(&thread,attr,function,args); //线程创建即......
  • 关于c++使用toml plusplus(俗称toml++)的使用(2)
    链接toml++-githubtoml++-帮助文档使用要求:c++17及以上版本toml语法-英文toml语法-中文toml读取参见官方给出的范例toml写入目标目标:数组表的写入目标文件内容如下[NET_INTERFACE]bool=falseinteger=1234567890string='thisisastring'[[f......
  • C++:新枚举与新结构
    一、枚举(一)C枚举?真整数!    考虑下面的程序#include<stdio.h>#include<stdlib.h>typedefenum{spring,summer,autumn,winter}Season;voidprintSeason(Seasonseason){ switch(season){ casespring: printf("spring"); break; case......
  • C++:从Type到Control
    一、基本数据类型     计算机的存储空间由最基本的二进制数(比特)组成,若干连续的二进制位(一般为8位)组成一个字节并被分配一个内存地址(),所以单独的比特没有地址,通常情况下CPU也不会一个比特一个比特读取数据,相反,字节被当作基本操作单位。在此前提下,一切要存储在计算机上的......
  • C++:函数
         FunctionsareC++entitiesthatassociateasequenceofstatements(afunctionbody)withanameandalistofzeroormorefunctionparameters.        函数是C++中的实体,它将一系列语句(一个函数体)与一个名称和零个或多个函数参数列表相关......
  • 关于c++使用toml plusplus(俗称toml++)的使用
    链接toml++-githubtoml++-帮助文档使用要求:c++17及以上版本toml语法-英文toml语法-中文toml读取参见官方给出的范例toml写入一个范例,一个开胃菜toml文件待生成的目标文件内容为[NET_INTERFACE]bool=falseinteger=1234567890string='thisis......
  • 【C++学习笔记 18】C++中的隐式构造函数
    举个例子#include<iostream>#include<string>usingString=std::string;classEntity{private: Stringm_Name; intm_Age;public: Entity(constString&name) :m_Name(name),m_Age(-1){} Entity(intage) :m_Name("UnKnown")......
  • C/C++内存管理
    一、目标1.C/C++内存分布2.C语言中动态内存管理方式3.C++中动态内存管理4.operatornew与operatordelete函数5.new和delete的实现原理6.常见面试题二、个人见解1.C/C++内存分布【说明】1.栈又叫堆栈--非静态局部变......
  • c++ 获取文件夹目录名字
        main.cpp#ifndefPHOTO_FILE_PROCESSOR_H#definePHOTO_FILE_PROCESSOR_H#include<iostream>#include<string>#include<vector>#include<dirent.h>#include<algorithm>#include<stdexcept>classPhotoFilePro......