BSON types and std::chrono

BSON types and std::chrono

本文关键字:chrono std and types BSON      更新时间:2023-10-16

在尝试使用MongoDB C++官方教程时,我遇到了一个我无法理解的错误。以下代码是从他们的网站上提取的:

#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)
              ^~~~~~

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

所以。。。我不知道为什么教程材料不适合我,也不完全理解C++的类型、模板或大括号初始值设定项列表。虽然我很乐意阅读一本针对我所面临问题的教程,但我甚至不知道谷歌有什么用。知识差距太大=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 } }

希望能起作用。(第一个是相对于系统时钟的epoch,在Linux系统上可能是1970年1月1日00:00:00 UTC的Unix epoch。)