Re[7]: [FYI] С++17: Генерация визитера для std::variant на л
От: reversecode google
Дата: 03.10.17 11:51
Оценка:
Здравствуйте, night beast, Вы писали:

NB>Здравствуйте, reversecode, Вы писали:


R>>>>все бы ничего, но я не вижу где используется функция overloaded(Ts...) что бы по не что то выводить

R>>>>в std::visitor передается сама структура overloaded с инициализацией лямбд

NB>>>это не функция.

NB>>>подробнее здесь. Explicitly specified Deduction Guide.

R>>ну теперь если правильно понял это конструктор, а "->" не возвращаемое значение а правило для вывода типа в конструкторе


NB>это правило. но конструктора нет.

NB>после того как получен тип, скорее всего, просто работает aggregate initialization.

R>>если так, то странно почему вообще не упростили без второй строчки, если вариадики есть уже в шаблоне типа, то само собой должен автоматом быть и конструктор для такого


NB>наличие вариадика в шаблоне не означает существования конструктора для него.

NB>собственно в примере этого конструктора и нет.
NB>ну, по крайней мере я так думаю

по примеру я как раз таки и решил что это конструтор

[Example:
template<class T> struct container {
container(T t) {}
template<class Iter> container(Iter beg, Iter end);
};
template<class Iter>
container(Iter b, Iter e) -> container<typename std::iterator_traits<Iter>::value_type>;
std::vector<double> v = { /* ... */};

container c(7); // OK. Deduces int for T
auto d = container(v.begin(), v.end()); // OK. Deduces double for T
container e{5, 6}; // Ill-formed. int is not an iterator
— end example]


судя по этому примеру как раз для конструктора container(Iter beg, Iter end)
и выводят тип, точнее по конструктору выводят Т
уточнив специализацию шаблоном
template<class Iter>
container(Iter b, Iter e) -> container<typename std::iterator_traits<Iter>::value_type>;

а в примере std::visit как раз через вариадик конструктор набиваются ламбды
и что бы этот вариадик конструктор сработал и уточняют правилом вывода

вот как я это понял теперь для себя

может к с++20 додумаются что имея вариадик шаблон, само собой может быть и вариадик конструктор и второе правило вывода если тип шаблона не задан для конструктора отдельно, можно будет опускать
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.