Задать вопрос
PavelK
@PavelK

Можно как-нибудь посмотреть, во что разворачиваются шаблоны при компиляции?

Приветствую!
Очень хочется посмотреть, во что превращаются шаблоны при компиляции.
Как это можно увидеть?
P.S. шаблоны сложные, для примера:
template<typename T>
    struct QVariantValueHelper : TreatAsQObjectBeforeMetaType<QVariantValueHelper<T>, T, const QVariant &, T>
    {
       static T metaType(const QVariant &v)
        {
        }
}


template <typename Derived, typename T, typename Argument, typename ReturnType, bool = IsPointerToTypeDerivedFromQObject<T>::Value>
    struct TreatAsQObjectBeforeMetaType : ObjectInvoker<Derived, Argument, ReturnType>
    {
    };

    template <typename Derived, typename T, typename Argument, typename ReturnType>
    struct TreatAsQObjectBeforeMetaType<Derived, T, Argument, ReturnType, false> : MetaTypeInvoker<Derived, Argument, ReturnType>
    {
    };


template <typename Derived, typename Argument, typename ReturnType>
    struct ObjectInvoker
    {
        static ReturnType invoke(Argument a)
        {
            return Derived::object(a);
        }
    };

    template <typename Derived, typename Argument, typename ReturnType>
    struct MetaTypeInvoker
    {
        static ReturnType invoke(Argument a)
        {
            return Derived::metaType(a);
        }
    };


Что вообще нужно - задать специализацию для metaType() и понять во что разворачивается.
  • Вопрос задан
  • 323 просмотра
Подписаться 2 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
Nipheris
@Nipheris Куратор тега C++
Попробуйте Metashell.
Ответ написан
Комментировать
15432
@15432
Системный программист ^_^
IDA в руки и вперёд. А вообще, для каждого используемого типа в шаблоне, создается отдельная функция и подставляется в места вызова.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы