История изменений
Исправление KivApple, (текущая версия) :
И как в твоих проектах пишут шаблоны, которые с одной стороны должны быть доступны тому, кто подключил заголовочник, с другой то что используют эти шаблоны внутри - деталь реализации?
Например, я делаю шаблонную функцию и внутри неё есть логгирование. Значит я обязан подключить инклюд логгера в этот заголовочник. Если я внутри шаблонной функции объявляю переменную бибилотечного типа, я должен подключить эту библиотеку в заголовочник, хотя это деталь реализации и нигде снаружи функции эта библиотека не торчит.
Или моя шаблонная функция вызывает другую мою шаблонную функцию. И пользователь должен знать только о первой, а вторая это деталь реализации не для посторонних глаз. Но я должен их описать в одном и том же инклюде или подключить инклюд со второй в первый.
В итоге мой инклюд засоряет пространство имён того, кто его использует, своими потрохами.
В сишных проектах это не такая проблема, потому что шаблонов там нет. А вот в плюсах шаблоны и инклюды образуют адскую смесь протекающей инкапсуляции.
Исправление KivApple, :
И как в твоих проектах пишут шаблоны, которые с одной стороны должны быть доступны тому, кто подключил заголовочник, с другой то что используют эти шаблоны внутри - деталь реализации?
Например, я делаю шаблонную функцию и внутри неё есть логгирование. Значит я обязан подключить инклюд логгера в этот заголовочник. Если я внутри шаблонной функции объявляю переменную бибилотечного типа, я должен подключить эту библиотеку в заголовочник, хотя это деталь реализации и нигде снаружи функции эта библиотека не торчит.
Или моя шаблонная функция вызывает другую мою шаблонную функцию. И пользователь должен знать только о первой, а вторая это деталь реализации не для посторонних глаз. Но я должен их описать в одном и том же инклюде или подключить инклюд со второй в первый.
В итоге мой инклюд засоряет пространство имён того, кто его использует, своими потрохами.
В сишных проектах это не такая проблема, потому что шаблонов там нет. А вот в плюсах шаблоны и инклюды образуют адскую смесь текущей инкапсуляции.
Исправление KivApple, :
И как в твоих проектах пишут шаблоны, которые с одной стороны должны быть доступны тому, кто подключил заголовочник, с другой то что используют эти шаблоны внутри - деталь реализации?
Например, я делаю шаблонную функцию и внутри неё есть логгирование. Значит я обязан подключить инклюд логгера в этот заголовочник. Если я внутри шаблонной функции объявляю переменную бибилотечного типа, я должен подключить эту библиотеку в заголовочник, хотя это деталь реализации и нигде снаружи функции эта библиотека не торчит.
Или моя шаблонная функция вызывает другую мою шаблонную функцию. И пользователь должен знать только о первой, а вторая это деталь реализации не для посторонних глаз. Но я должен их описать в одном и том же инклюде или подключить инклюд со второй в первый.
В итоге мой инклюд засоряет пространство имён того, кто его использует, своими потрохами.
Исправление KivApple, :
И как в твоих проектах пишут шаблоны, которые с одной стороны должны быть доступны тому, кто подключил заголовочник, с другой то что используют эти шаблоны внутри - деталь реализации.
Например, я делаю шаблонную функцию и внутри неё есть логгирование. Значит я обязан подключить инклюд логгера в этот заголовочник. Если я внутри шаблонной функции объявляю переменную бибилотечного типа, я должен подключить эту библиотеку в заголовочник, хотя это деталь реализации и нигде снаружи функции эта библиотека не торчит.
Или моя шаблонная функция вызывает другую мою шаблонную функцию. И пользователь должен знать только о первой, а вторая это деталь реализации не для посторонних глаз. Но я должен их описать в одном и том же инклюде или подключить инклюд со второй в первый.
В итоге мой инклюд засоряет пространство имён того, кто его использует, своими потрохами.
Исходная версия KivApple, :
И как в твоих проектах пишут шаблоны, которые с одной стороны должны быть доступны тому, кто подключил заголовочник, с другой то что используют эти шаблоны внутри - деталь реализации.
Например, я делаю шаблонную функцию и внутри неё есть логгирование. Значит я обязан подключить инклюд логгера в этот заголовочник. Если я внутри шаблонной функции объявляю переменную бибилотечного типа, я должен подключить эту библиотеку в заголовочник, хотя это деталь реализации и нигде снаружи функции эта библиотека не торчит.
В итоге мой инклюд засоряет пространство имён того, кто его использует, своими потрохами.