Страницы

Поиск по вопросам

вторник, 22 января 2019 г.

Как переписать Template deduction guide (С++17) на C++14?

Дан код на С++17:
template struct Ok { T value; }; template<> struct Ok {};
// template deduction guides template Ok(T) -> Ok;
Template deduction guides позволяют имея тип Ok вызывать Ok как функцию (так выглядит, на самом деле вызывается конструктор):
auto c = Ok(5); // T deduced as int // без template deduction guide я так писать не могу, // но должен писать: auto c = Ok(5); // T can not be deduced :(
Вопрос в том, как это переписать на С++14 или ниже? Чтоб я писал просто:
auto c = Ok("hello"s); // T deduced as std::string
Но с произвольным типом.


Ответ

template Ok> makeOk(T&& arg){ return Ok>{std::forward(arg)}; }
auto c = makeOk(5); auto d = makeOk(std::make_unique(6.7));

Комментариев нет:

Отправить комментарий