… как наполнить шаблонный класс разным содержимым в зависимости от значений параметров шаблона?
Когда-то, уже довольно давно, язык D начали делать как "правильный C++" с учетом накопившегося в C++ опыта. Со временем D стал не менее сложным и более выразительным языком, чем C++. И уже C++ стал подсматривать за D. Например, появившийся в C++17 if constexpr
, на мой взгляд, — это прямое заимствование из D, прототипом которому послужил D-шный static if.
К моему сожалению, if constexpr
в С++ не обладает такой же мощью, как static if
в D. Тому есть свои причины, но все-таки бывают случаи, когда остается только пожалеть, что if constexpr
в C++ не позволяет управлять наполнением C++ного класса. Об одном из таких случаев и хочется поговорить.
Речь пойдет о том, как сделать шаблонный класс, содержимое которого (т.е. состав методов и логика работы некоторых из методов) менялось бы в зависимости от того, какие параметры были переданы этому шаблонному классу. Пример взят из реальной жизни, из опыта разработки новой версии SObjectizer-а.
Задача, которую требуется решить
Требуется создать хитрый вариант "умного указателя" для хранения объектов-сообщений. Чтобы можно было написать что-то вроде:
Читать полностью »