Каковы недостатки использования шаблонов? - PullRequest
10 голосов
/ 29 апреля 2010

Некоторые из недостатков:

  1. его синтаксис сложен
  2. компилятор генерирует дополнительный код

Ответы [ 11 ]

0 голосов
/ 12 июля 2014

Я использовал шаблоны иногда на протяжении многих лет. Они могут быть удобны, но с профессиональной точки зрения, я от них отклоняюсь. Две из причин:

1

Необходимость либо: а) раскрыть определения функций (а не только объявления) «исходного» кода для кода «где используется» или б) создать фиктивную инстанцирование в исходном файле. Это необходимо для компиляции. Вариант а.) Может быть сделан путем определения функций в заголовке или фактического включения cpp.

Одна из причин того, что мы допускаем заголовки в C ++ (по сравнению, например, с C #), заключается в отделении «интерфейса» от «реализации». Что ж, шаблоны кажутся несовместимыми с этой философией.

2

Функции, вызываемые экземпляром параметра типа шаблона, могут не выполняться во время компиляции, что приводит к ошибкам соединения. Например. Т пример; example.CompilerDoesntKnowIfThisFunctionExistsOnT (); Это "свободный" ИМХО.

Решения:

Вместо шаблонов я склоняюсь к использованию базового класса, благодаря которому производные / контейнерные классы знают, что доступно во время компиляции. Базовые классы могут предоставлять универсальные методы и «типы», для которых часто используются шаблоны. Вот почему доступность исходного кода может быть полезна, если необходимо изменить существующий код для вставки базового базового класса в иерархию наследования, где это необходимо. В противном случае, если код является закрытым исходным кодом, лучше переписать его, используя общие базовые классы, а не использовать шаблон в качестве обходного пути.

Если тип не важен, например, vector , тогда как насчет использования «объекта». C ++ не предоставил ключевое слово «object», и я предложил д-ру Bjarne Stroustrup, что это было бы полезно, особенно для того, чтобы сообщить компилятору и людям, читающим код, этот тип не важен (для случаев, когда это не так). Я не думаю, что C ++ 11 имеет это, может быть, C ++ 14 будет?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...