Как переслать аргументы конструктора для boost :: option - PullRequest
2 голосов
/ 01 апреля 2019

У меня есть следующая простая структура:

struct X
{
    X(std::string name, int value): name_(name), value_(value){}

    std::string name_;
    int value_;
};

Я бы хотел использовать его с опцией boost, не копируя. Вот один из вариантов:

boost::optional<X> op;
op.emplace("abc", 5);

Возможно ли это без использования функции emplace? (Я имею в виду одно строчное выражение)

1 Ответ

5 голосов
/ 01 апреля 2019

Да, просто создайте его с помощью тега «на месте», который пересылает аргументы ctor!

boost::optional<X> op(boost::optional::in_place_init, "abc", 5);

( ref )

FWIW, если вы этого не сделаетепомните о движении, тогда это тоже работает:

boost::optional<X> op(X("abc", 5));

Сканирование этой справочной страницы;Есть множество способов построить или заполнить boost::optional.

...