LINUX.ORG.RU

История изменений

Исправление KivApple, (текущая версия) :

И как в твоих проектах пишут шаблоны, которые с одной стороны должны быть доступны тому, кто подключил заголовочник, с другой то что используют эти шаблоны внутри - деталь реализации?

Например, я делаю шаблонную функцию и внутри неё есть логгирование. Значит я обязан подключить инклюд логгера в этот заголовочник. Если я внутри шаблонной функции объявляю переменную бибилотечного типа, я должен подключить эту библиотеку в заголовочник, хотя это деталь реализации и нигде снаружи функции эта библиотека не торчит.

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

В итоге мой инклюд засоряет пространство имён того, кто его использует, своими потрохами.

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

Исправление KivApple, :

И как в твоих проектах пишут шаблоны, которые с одной стороны должны быть доступны тому, кто подключил заголовочник, с другой то что используют эти шаблоны внутри - деталь реализации?

Например, я делаю шаблонную функцию и внутри неё есть логгирование. Значит я обязан подключить инклюд логгера в этот заголовочник. Если я внутри шаблонной функции объявляю переменную бибилотечного типа, я должен подключить эту библиотеку в заголовочник, хотя это деталь реализации и нигде снаружи функции эта библиотека не торчит.

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

В итоге мой инклюд засоряет пространство имён того, кто его использует, своими потрохами.

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

Исправление KivApple, :

И как в твоих проектах пишут шаблоны, которые с одной стороны должны быть доступны тому, кто подключил заголовочник, с другой то что используют эти шаблоны внутри - деталь реализации?

Например, я делаю шаблонную функцию и внутри неё есть логгирование. Значит я обязан подключить инклюд логгера в этот заголовочник. Если я внутри шаблонной функции объявляю переменную бибилотечного типа, я должен подключить эту библиотеку в заголовочник, хотя это деталь реализации и нигде снаружи функции эта библиотека не торчит.

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

В итоге мой инклюд засоряет пространство имён того, кто его использует, своими потрохами.

Исправление KivApple, :

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

Например, я делаю шаблонную функцию и внутри неё есть логгирование. Значит я обязан подключить инклюд логгера в этот заголовочник. Если я внутри шаблонной функции объявляю переменную бибилотечного типа, я должен подключить эту библиотеку в заголовочник, хотя это деталь реализации и нигде снаружи функции эта библиотека не торчит.

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

В итоге мой инклюд засоряет пространство имён того, кто его использует, своими потрохами.

Исходная версия KivApple, :

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

Например, я делаю шаблонную функцию и внутри неё есть логгирование. Значит я обязан подключить инклюд логгера в этот заголовочник. Если я внутри шаблонной функции объявляю переменную бибилотечного типа, я должен подключить эту библиотеку в заголовочник, хотя это деталь реализации и нигде снаружи функции эта библиотека не торчит.

В итоге мой инклюд засоряет пространство имён того, кто его использует, своими потрохами.