Re: Что такое мета-программирование ?
От: okman Беларусь https://searchinform.ru/
Дата: 01.11.11 18:19
Оценка: -1
Здравствуйте, lseder, Вы писали:

L>Привет,

L> Что же такое мета-программирование ? Макросы для генерации кода ?
L>Можно ваше определение, для чего служит, как может выглядеть.

Программирование на этапе компиляции.
Разные языки программирования имеют разные для этого возможности.
К примеру, вот код на C++ для вычисления факториала:
#include <iostream>

template <int n>
struct factorial
{
    enum
    {
        value = n * factorial<n - 1>::value
    };
};

template <>
struct factorial<1>
{
    enum
    {
        value = 1
    };
};

int main()
{
    std::cout << "Factorial of 10 is " << factorial<10>::value << std::endl;
    return 0;
}

Factorial of 10 is 3628800

factorial<10>::value вычисляется на этапе компиляции, а не в рантайме.

Из наиболее очевидных применений — написание разнообразных статических проверок.
К примеру, есть следующий класс:
template <typename T_Type>
class foo
{
    // ...
};

Допустим, по каким-то причинам нам понадобилось запретить использование foo<T_Type>,
когда T_Type является указателем.
Попробуем написать такую специализацию, которая при инстанциировании заставила бы
компилятор сгенерировать ошибочный код:
template <typename T_Type>
class foo<T_Type *>;

Вот и все ! Этот пустой тип будет "срабатывать" каждый раз, когда T_Type будет указателем.
foo<bool>, foo<int>, foo<some_class> или даже foo<foo<foo<some_class> > > являются допустимыми формами.
А вот при написании foo<int *> или foo<char *> получим ошибку на стадии компиляции.
Обычно такие классы-стражи именуются соответствующим образом (must_not_be_pointer, к примеру),
чтобы их легче было понять, увидев в списке ошибок.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.