Проблема с шаблонным классом

Обращение к сторонним библиотекам — нормальная практика.

Если обращение к сторонним библиотекам требуется для функционала, который должен быть «из коробки» — это ненормальная практика.

Вот поэтому у нас на работе уже не первого электрика калечит... Ведь именно они лезут во внутрь.

Нарушение правила №1 техники безопасности: «не знаешь — не лезь!».
Но это — «к слову». А смысловая параллель хреновенькая. Шаблоны не должны «калечить», если идёт разработка с их использованием. Если они «калечат», значит плохо спроектированы/реализованы. О чём я собственно и веду речь.

А пользоваться тем, что есть по правилам можно и не зная шаблонов.

Можно. Но это поощряет monkey-код. Что есть не хорошо.

Во-первых, стандарты были начиная с 1998 года.

угу, в котором сразу же были шаблоны.

Угу, только после выхода стандарта в 98-ом активно шаблонами не пользовались лет 10. Да, что-то использовалось внутри STL. Что-то использовалось в связке с STL. Но не более.

Потом начали появляться библиотеки типа Boost.

А потом в стандарт (который регламентирует и STL) ввели большую группу классов/функций в <algorithm> и связанные с ним заголовки. И оказалось, что без знания шаблонов осмысленно писать код стало практически невозможным. Т.е. либо используй «C с классами», либо учи шаблоны.

Причем здесь 20 лет и софт — не ясно.

Поясняю: 90% этого софта написано именно на «C с классами».

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

Т.е. я имею ввиду, что если писать код в обычном процедурном стиле, то вспомогательные функции, не предназначенные для непосредственного вызова из импортирующего кода, «закрыть» нельзя? Или все-таки как-то можно?

Если обращение к сторонним библиотекам требуется для функционала, который должен быть «из коробки» — это ненормальная практика.

ВСЕГО из коробки быть не может.

Шаблоны не должны «калечить», если идёт разработка с их использованием.

А вот шаблоны здесь как раз не причем.
Здесь есть тоже правило — не знаешь, может покалечить.
Ведь если Вы не знаете чего-то, то будете по граблям ходить.
И это касается не только электричества и шаблонов.

Угу, только после выхода стандарта в 98-ом активно шаблонами не пользовались лет 10

Большей частью потому, что VS 6.0 их не поддерживал. )))
И сейчас мы имеем похожее.
C++11 и 14 еще не всеми поддерживается,
а на носу уже 2017 год и C++17.
Да и 14-ый еще, наверное, никто полностью не поддерживает.
Хотя и заявлена полная поддержка.

Но не более.

Это Вам так кажется. Писать всё с нуля не имеет смысла.
У компаний, занимающихся разработкой есть набор либо сторонних,
либо собственных библиотек. С нуля работают только новички.

что без знания шаблонов

т.е. без знания львиной части языка.

Поясняю: 90% этого софта написано именно на «C с классами»

И как это относится к нечистоте C++? )
Оно писалось когда еще компиляторов не было с нужным функционалом,
либо был запрет на использование шаблонов.
Вы можете не использовать шаблоны, исключения и т.д.
Это часто практикуется.
т.е. если Вы не знаете шаблонов, то не используйте их.
Никто Вам не запрещает.

невозможно определить статическую функцию

Если она не шаблонная, то можно.
Если шаблонная и заранее известно
с какими типами она работает,
то явно инстанцировать в .cpp можно.
Ну а в ином случае не закроете.

Но учтите, шаблоны не панацея.
Если можно сделать просто без шаблона,
то лучше так и сделать.

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.