Ключевое отличие шаблона от макроса
От: Shmj Ниоткуда  
Дата: 09.07.23 04:18
Оценка: -1
Вот тут
Автор: rg45
Дата: 07.07.23
чел. пишет:

Дальше можно не читать. Одно только то, что ты ставишь макросы и шаблоны в один ряд, красноречиво говорит о твоей квалификации. Как говорится, у Вас не тридцатилетний опыт — у Вас годичный опыт, повторенный тридцать раз.


Т.е. заклеймили даже за саму попытку поставить в один ряд. И мне не ясно почему.

Вот код:

#define DECLARE_CLASS1(T) \
class Class1_##T \
{ \
public: \
    T getInc() \
    { \
        m_t += 1; \
        return m_t; \
    } \
private: \
    T m_t; \
};

DECLARE_CLASS1(int)
DECLARE_CLASS1(float)

int main() {

    Class1_int c1;
    Class1_float c2;

    c1.getInc();
    c2.getInc();
}


Это тот же шаблон класса, только с помощью макросов. И в чем ключевая разница? Что я так уж потерял?

Ну да, нужно для каждого типа написать эту строчку DECLARE_CLASS1(TTT). Это не удобно. Но по сути — синтаксический сахар. Разницы пока принципиальной нет.

Все равно каждый шаблон раскрывается в момент компиляции. Он должен быть целиком и полностью определен в заголовочном файле — нельзя разнести декларацию и дефиницию, как с обычной функцией или классом. С макросом та же проблема.

Возможно чего нельзя сделать макросами — это частичная специализация шаблонов (а может и можно придумать как). Что еще?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.