BSON 类型和 std::chrono

BSON types and std::chrono

在尝试完成 official MongoDB C++ tutorial 时,我 运行 遇到了一个我不明白的错误。以下代码直接从他们的网站上提取:

#include <chrono>

#include <bsoncxx/builder/stream/document.hpp>
#include <bsoncxx/types.hpp>

#include <mongocxx/client.hpp>
#include <mongocxx/instance.hpp>
#include <mongocxx/uri.hpp>

using bsoncxx::builder::stream::document;
using bsoncxx::builder::stream::open_document;
using bsoncxx::builder::stream::close_document;
using bsoncxx::builder::stream::open_array;
using bsoncxx::builder::stream::close_array;
using bsoncxx::builder::stream::finalize;

int main()
{
//...
    bsoncxx::document::value restaurant_doc = document{}
        << "address" << open_document << "street"
//...
        << bsoncxx::types::b_date{std::chrono::milliseconds{12323}}
//...
        << "restaurant_id" << "41704620"
        << finalize;

我从 GCC (v6.1.1) 得到的错误如下所示:

insert.cpp: In function ‘int main()’:
insert.cpp:36:65: error: no matching function for call to     ‘bsoncxx::v_noabi::types::b_date::b_date(<brace-enclosed initializer list>)’
   << bsoncxx::types::b_date{std::chrono::milliseconds{12323}}

In file included from /usr/include/bsoncxx/v_noabi/bsoncxx/builder/core.hpp:26:0,
                 from /usr/include/bsoncxx/v_noabi/bsoncxx/builder/stream/document.hpp:17,
                 from insert.cpp:3:
/usr/include/bsoncxx/v_noabi/bsoncxx/types.hpp:306:14: note: candidate: bsoncxx::v_noabi::types::b_date::b_date(const time_point&)
     explicit b_date(const std::chrono::system_clock::time_point& tp)
              ^~~~~~

我尝试用括号而不是大括号初始化 chrono::milliseconds,但是 GCC 只是更清楚地抱怨可用的 bsoncxx::types::b_date 构造函数与我提供的构造函数之间的类型不匹配。根据 MongoDB C++11 Driver docs,我还尝试给它提供一个用相同数字初始化的 chrono::system_clock::time_point,但我仍然不匹配。

所以...我不确定教程 material 为什么对我不起作用,我也不完全理解 C++ 的类型、模板或大括号初始化列表。虽然我很乐意阅读针对我遇到的问题的教程,但我什至不确定要 Google 做什么。知识差距太大。 =P

因此,我们将不胜感激任何帮助。 =)

类似

bsoncxx::types::b_date { std::chrono::system_clock::time_point {
    std::chrono::milliseconds { 12323 } } }

bsoncxx::types::b_date { std::chrono::system_clock::now() +
    std::chrono::milliseconds { 12323 } }

应该很有希望工作。 (第一个将与系统时钟的纪元相关,这可能是 Unix 纪元 1970 年 1 月 1 日 00:00:00 Linux 系统上的 UTC。)