小编kab*_*aba的帖子

有没有办法将 boost::json::serializer 切换为美化输出?

boost::json::serializer如文档中的示例所示使用- 快速查看以紧凑格式保存 json 树。

有没有办法指示serializer输出人类可读的文件(即带有换行符和空格)?我四处搜寻,但没有发现任何提示。

注意:更好的是以紧凑的格式编写树的较高级别,以及一些对象或数组(可能是标记的)。

缩短的示例代码可能如下所示:

#include <iostream>
#include <boost/json.hpp>
#include <boost/json/src.hpp> // use header-only
using namespace boost;

int main(int /*argc*/, char */*argv*/[]) {
    json::value jv = {
        { "pi", 3.141 },
        {"list", {1, 0, 2}},
        };

    json::serializer sr;
    sr.reset( &jv );
    do {
        char buf[ 16 ];
        std::cout << sr.read( buf );
    } while( ! sr.done() );
}
Run Code Online (Sandbox Code Playgroud)

这(正确地)输出{"pi":3.141E0,"list":[1,0,2]},但我宁愿有:

{
  "pi":3.141E0,
  "list":
  [
    1,
    0,
    2
  ]
}
Run Code Online (Sandbox Code Playgroud)

或(“NB”版本):

{
  "pi":3.141E0, …
Run Code Online (Sandbox Code Playgroud)

c++ json boost

8
推荐指数
1
解决办法
1906
查看次数

std::unique_lock 和 std::shared_lock 在同一线程中 - 不应该工作,但是可以吗?

为什么可以在 a 上获取两个不同的锁std::shared_mutex

下面的代码

#include <shared_mutex>
#include <iostream>

int main(int /*argc*/, char * /*argv*/[]) {
    std::shared_mutex mut;
    std::unique_lock<std::shared_mutex> ulock{mut};
    if(ulock)
        std::cout << "uniqe_lock is bool true\n";
    if(ulock.owns_lock())
        std::cout << "uniqe_lock owns lock\n";
    std::shared_lock<std::shared_mutex> slock{mut};
    if(slock)
        std::cout << "shared_lock is bool true\n";
    if(slock.owns_lock())
        std::cout << "shared_lock owns lock\n";
}
Run Code Online (Sandbox Code Playgroud)

当使用g++9.4.0 编译时(当前在 Ubuntu 20.04.1 上可用)

g++ -std=c++17 mutex.cpp
Run Code Online (Sandbox Code Playgroud)

输出所有cout行。即线程获取unique_lock shared_lock据我了解cppreferenceshared_mutex当第一个锁仍然存在时,获取第二个锁应该失败。

“在一个线程内,同一时间只能获取一把锁(共享锁或独占锁)。”

我在这里想念什么?为什么shared_lock前一个unique_lock仍然有效就可以获取到?

c++ mutex g++ c++17

2
推荐指数
1
解决办法
1937
查看次数

标签 统计

c++ ×2

boost ×1

c++17 ×1

g++ ×1

json ×1

mutex ×1