Вот
тутАвтор: 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). Это не удобно. Но по сути — синтаксический сахар. Разницы пока принципиальной нет.
Все равно каждый шаблон раскрывается в момент компиляции. Он должен быть целиком и полностью определен в заголовочном файле — нельзя разнести декларацию и дефиницию, как с обычной функцией или классом. С макросом та же проблема.
Возможно чего нельзя сделать макросами — это частичная специализация шаблонов (а может и можно придумать как). Что еще?