Типы BSON и std :: chrono

В попытке проработать официальный учебник 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)
^~~~~~

Я попытался инициализировать chrono::milliseconds с скобками вместо скобок, но тогда GCC просто жаловался более четко на несоответствие типов между доступными bsoncxx::types::b_date конструкторы и что я предоставлял. Я также пытался кормить его chrono::system_clock::time_point инициализируется с тем же номером, в соответствии с MongoDB C ++ 11 Драйвер Документы, но я все еще получил несоответствие.

Итак … Я не уверен, почему учебный материал не работает для меня, и при этом я не полностью понимаю списки инициализатора набора, шаблонов или скобок C ++. И хотя я был бы рад пройти учебник, посвященный конкретной проблеме, я даже не уверен, для чего Google. Пробелы в знаниях слишком велики. = Р

Следовательно, любая помощь будет принята с благодарностью. знак равно

0

Решение

Что-то вроде

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 1 января 1970 г. 00:00:00 UTC в системах Linux.)

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]