Прежде всего, если вы хотите отделить логику приведения от внутренних элементов шаблона, вы можете сделать это с помощью идиомы PIMPL (Pointer to Impl), добавив слой косвенности.По сути, поместите этот шаблон в его собственный заголовок, который включает определение для BlahPrivate.Сделайте это автономным.Затем создайте файл .h, который вызывает указанную выше функцию, за исключением того, что он перенаправляет вызов функции в файл заголовка, который имеет определение BlahPrivate и логику приведения.
Во-вторых, вам, вероятно, лучше просто определить неявноеоператоры преобразования в BlahPrivate для типов, в которые вы хотите преобразовать его ... например, добавив это в свой класс:
operator std::string() { return std::string("This is a BlahPRivate"); }
позволит вам использовать BlahPrivate везде, где ожидается строка - это довольноизящный :) Очевидно, вы бы хотели придать своим приведениям больше смысла.
Не сходите с ума от неявных операторов приведения, иначе это кусает вас в задницу.На самом деле, я думаю, что все это, вероятно, плохая идея, потому что даже ваша предложенная функция затруднит отладку - вместо статической ошибки приведения для плохого типа в вашей строке с ошибкой, вы получите это в этой функции инеобходимо проследить его обратно.
Аналогично, неявное приведение может выполнять приведение (и работу), когда вы этого не хотите: т.е. вы записали свои параметры в функцию в обратном порядке, а std :: string - одно.была автоматически преобразована в неявную функцию выше - неявное приведение снижает вашу безопасность типов. Иногда лучше делать вещи вручную (когда они тривиальны, как актеры) - в конце концов, вам действительно не нужно часто кастовать - если вы делаете это, это часто является признаком плохого дизайна, и вы должны переосмыслить то, что вам нужно.делаешь.