Ключевое слово шаблона в качестве аргумента шаблона - PullRequest
0 голосов
/ 14 февраля 2019

Чтение функционального программирования на с ++ Иваном Чукичем, видя это ближе к концу раздела 9.1.4.

Откуда этот синтаксис "Вариант шаблона" и "Ожидаемый шаблон"?

template <typename T, template Variant,
      template Expected = expected<T, std::string>>
Expected get_if(const Variant& variant)
{
    T* ptr = std::get_if<T>(variant);
    if (ptr) {
       return Expected::success(*ptr);
    } else {
       return Expected::error("Variant doesn't contain the desired type");
    }
}

Это правильный синтаксис C ++?Это не похоже на параметр шаблона шаблона.

Попробовать небольшой образец игрушки на Годболте у меня не получится.

template <typename T, template Variant, template E = std::map<T, std::string>>
int f(const Variant& v) {
   return std::get<0>(v);
}
int main() {
   std::variant<int> v{0};
   return f(v);
}

1 Ответ

0 голосов
/ 14 февраля 2019

Это опечатка в книге.Замените эти два появления «template» на «typename».

Вот ссылка для исправления.https://forums.manning.com/posts/list/45184.page

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...