Comments 8
Грустно читать подобные статьи. Начинается казаться, что ничего не понимаешь в с++. :)
Слишком сложно!
template <typename...Ts>
struct instantate {
std::tuple<decltype(&MyClass::f<Ts>)...> c{&MyClass::f<Ts>...};
};
instantate<int, double, bool, char, const char*> inst;
Круто. У меня на clang'е в release только пришлось volatile дописать:
instantate<int, double, bool, char, const char*> inst;
Это более элегантное решение, а не более простое :-)
Оно столько хитрых вещей использует из C++11, что мама не горюй. Но они, собственно, для того в язык и были добавлены, чтобы подобные вещи делать. Так что да, нужно потихоньку перестраивать своё мышление.
Как AxisPod говорил: иногда рекурсивный подход, аналогичный обработке «списка типов» имеет смысла и с вариадиками, но «это требуется совсем не всегда». Вот именно потому что можно комбинировать уже готовые части подобным способом.
Оно столько хитрых вещей использует из C++11, что мама не горюй. Но они, собственно, для того в язык и были добавлены, чтобы подобные вещи делать. Так что да, нужно потихоньку перестраивать своё мышление.
Как AxisPod говорил: иногда рекурсивный подход, аналогичный обработке «списка типов» имеет смысла и с вариадиками, но «это требуется совсем не всегда». Вот именно потому что можно комбинировать уже готовые части подобным способом.
Sign up to leave a comment.
Инстанциирование шаблонов функций по списку типов (Часть 2)