Re[6]: Templates
От: chaotic-kotik  
Дата: 05.07.18 06:43
Оценка:
Здравствуйте, AlexGin, Вы писали:

AG>Фичи языка — это твои друзья, а НЕ враги!

AG>Кстати, открою тебе маленький секрет — применение конструкции if constexpr из набора C++17 —
AG>позволяет работать с шаблонами удобнее, чем раньше!!!
AG>Вот простой пример:
AG>
AG>template <typename C>
AG>void print (const C &c)
AG>{
AG>    if constexpr (std::is_same_v<C, std::vector<int>>) {
AG>        cout << "vector<int>: ";
AG>    }

AG>    if constexpr (std::is_same_v<C, std::list<int>>) {
AG>        cout << "list<int>:   ";
AG>    }

AG>    if constexpr (std::is_same_v<C, std::deque<int>>) {
AG>        cout << "deque<int>:  ";
AG>    }

AG>    for (auto i : c)
AG>    {
AG>        cout << i << ", ";
AG>    }
AG>    cout << '\n';
AG>}
AG>

AG>Архитектура кода — только выигрывает от применения современных возможностей языков программирования.
AG>Так, применение приведенного выше метода, позволит тебе забыть о трудно-понимаемом SFINAE

абсолютно синтетический пример, при этом а) все типы, которые ф-я поддерживают должны перечисляться внутри и б) std::vector<int, myalloc> уже не пройдет, я уже молчу про std::array
ну и я бы запилил такое на typeid::name и abi::__cxa_demangle (для gcc, clang)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.