Прежде всего, если вы хотите, чтобы отделить логику произнесения от внутренностей шаблонов, вы можете сделать это с Pimpl (Указатель IMPL) идиомы, добавляя слой косвенности. По существу, поместите этот шаблон в свой собственный заголовок, который включает определение для BlahPrivate. Сделайте это отдельно. Затем создайте файл .h, который вызывает функцию, указанную выше, за исключением того, что она переадресовывает вызов функции в файл заголовка, который имеет определение BlahPrivate и литую логику.
Во-вторых, вы, вероятно, лучше просто определение неявных операторов преобразования в BlahPrivate для типов, которые вы хотели бы, чтобы преобразовать его ... например, положить это в вашем классе:
operator std::string() { return std::string("This is a BlahPRivate"); }
бы позволяют использовать BlahPrivate везде, где ожидалась строка - это довольно изящно :) Очевидно, вы хотели бы придать вашим броскам больше смысла.
Не сходите с ума с помощью неявных операторов трансляции, иначе он укусит вас в прикладе. На самом деле, я думаю, что все это, вероятно, плохая идея, потому что даже предлагаемая функция сделает отладку сложной - вместо того, чтобы статическая ошибка при запуске плохого типа в вашей строке с ошибкой, вы получите ее в этой функции и должны проследить его назад.
Аналогичным образом, неявные отбрасывания могут выполнять приведение (и работу), когда вы этого не хотите: то есть вы написали свои параметры назад в функции, а std :: string автоматически преобразуется в неявную функцию выше - неявные отбрасывания уменьшают безопасность вашего типа. Иногда делать вещи вручную (когда они тривиальны, как актеры) лучше - ведь вам действительно не нужно бросать часто - если вы это делаете, это часто признак плохого дизайна, и вы должны переосмыслить, что вы делает.
Является ли 'd-pointer' термином? С какими проблемами вы сталкиваетесь? – iammilind
Что такое 'BlahPrivate'? Это не параметр шаблона, поэтому вам нужно будет определить его, прежде чем вы сможете разыменовать его (например, получить доступ к его членам). –
, если вы не можете указать заголовочный файл BlahPrivate в файле заголовка Blah, пожалуйста, включите его как .cpp-файл #include #include –
PermanentGuest