JSON for Modern C++使用以下语法:
json j = "{ \"happy\": true, \"pi\": 3.141 }"_json;
我想知道他们是如何完成这件事的。
我不理解字符串文字_json语法。
答案 0 :(得分:5)
C ++ 11在该语言中添加了user defined literals。定义用户定义的字符串文字将如下所示:
MyType operator"" _my_udl(char const*, std::size_t);
它的工作方式几乎与常规函数调用完全相同。当你有"some string"_my_udl
时,编译器会生成对operator"" _my_udl
的调用,并传入字符串文字和大小。
这就是Niels Lohmann的json图书馆对_json
所做的事情;它是一个UDL,相当于对json::parse
的调用。
答案 1 :(得分:-1)
关于JSON for Modern C++的文档: (序列化/反序列化)
请注意,如果不附加_json后缀,则不会解析传递的字符串文字,而只是用作JSON字符串值。也就是说,json j =" {\" happy \":true,\" pi \":3.141}"只会存储字符串" {" happy":true," pi":3.141}"而不是解析实际的对象。
基本上,如果你没有把__json放在最后,那么编译器就无法知道你打算将它存储为JSON对象,所以它只会保存它作为标准字符串