Подтвердить что ты не робот

Что является недостатком использования шаблонов?

Возможный дубликат:
Каковы недостатки использования шаблонов?

Чтение о шаблонах Я узнал, что, например, если вы не используете функцию из шаблона класса, она не будет генерировать код для этого (положительная вещь). Я также видел, что вы можете использовать программирование времени компиляции с использованием шаблонов и реализовать, скажем, факторный пример, и результат будет известен во время компиляции.
Поэтому мой вопрос: каковы негативные аспекты использования шаблонов?

Спасибо.

4b9b3361

Ответ 1

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

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

читаемость. Код шаблонов может быть сложным для чтения.

Сложность. Многие из основных трюков основаны на не очень хорошо известных аспектах языкового стандарта, поэтому вам нужно достойное знание языка, чтобы ладить с ними.

Ответ 2

Чтобы клиенты использовали шаблоны, которые вы разработали, вы должны предоставить исходный код. Это, вероятно, самый значительный недостаток, с которым я столкнулся на практике.

Ответ 3

  • более длительное время компиляции
  • сообщения об ошибках компилятора, которые труднее читать

Ответ 4

Вы не можете создавать функции-члены шаблона внутри классов виртуальными. То есть:

class Foo{
public:
    template<typename T>
    void doSomething(const T& aThing);

    virtual void somethingElse();
//rest of class
};

class Bar : public Foo{
public:
    template<typename T>
    void doSomething(const T& aThing);

    virtual void somethingElse();
};

Foo* var = new Bar();
var->doSomething(1); //will call Foo method, not Bar.
var->somethingElse(); //will call Bar method.  It polymorphic.

и это часто вызывает проблемы для программистов.

Ответ 5

  • Синтаксис запугивает.
  • Нелегко отладить код, созданный из шаблонов.
  • Вы должны предоставить весь свой код в заголовках. Нет прав на интеллектуальную собственность.

Ответ 6

Они могут увеличить размер исполняемого файла экспоненциально с глубиной вложенности шаблона.

Они могут экспоненциально увеличивать время компиляции.

Сообщения компилятора могут быть трудно понять.

Ответ 7

  • Как правило, невозможно расшифровать ваши типы в окне просмотра отладчика, поскольку они содержат около тысячи символов. Таким образом, вы нажмете точку останова в отладчике, вы откроете окно просмотра, чтобы проверить свою карту, а в столбце "type" вы попали в беспорядок текста, который полностью не поддается анализу.

  • Возможность избытка. Это использование шаблона для всего! Но это остается для программиста. Я просто говорю, что я видел программистов, которые используют его для всего.