История изменений
Исправление zamazan4ik, (текущая версия) :
Да, Вы совершенно верно подметили - вся соль как раз таки и заключается в представлении Writer (а от него и всё дальше пляшет).
Теперь надо бы пройтись по вариантам, которые Вы предложили:
Либо Writer у вас будет обычным классом, который принимает только экземпляры класса Dialect (при этом у вас нет возможности сделать наследника Dialect с дополнительными атрибутами внутри и скормить его Writer-у, т.к. при копировании в конструкторе Writer-а произойдет срезка).
Дополнительные атрибуты нам и не нужны в данном случае, так как я внутри Writer работаю только с определённым набором атрибутов и пользователь не может его расширить. Так что подход должен работать.
Со вторым вариантом - вроде бы и так всё понятно.
Как выбрать - вопрос конечно интересный. По моему скромному мнению, первый вариант удобнее использовать, нежели второй.
По поводу же вариантов оформления Dialect-ов, то мое недоумение вызвано тем, что вы же можете с помощью одного и того же описания шаблона Dialect получать разные типы Dialect-ов и вот таким образом:
Оно прекрасно работало, если бы не одно но. Параметром шаблона может быть не только trivial-type, а там уже через шаблоны таким образом значение не удастся передать.
Исходная версия zamazan4ik, :
Да, Вы совершенно верно подметили - вся соль как раз таки и заключается в представлении Writer (а от него и всё дальше пляшет).
Я всё больше склоняюсь к варианту как-то полностью отвязывать тип Writer от Dialect, чтобы не было лишней привязанности.
Что касается получения просто нового Dialect через using, то всё бы оно прекрасно работало, если бы не одно но. Параметром шаблона может быть не только trivial-type, а там уже через шаблоны таким образом значение не удастся передать.