Стандартное решение для этой ситуации использует вспомогательный класс:
template<typename T> struct initialize_me;
class internalEntity
{
public:
internalEntity(typename T, std::string name)
{
initialize_me<T>::please(*this, name };
// ... The rest of the class declaration.
Это предварительное объявление позволяет вам определить остальную часть класса, прежде чем приступить к работе. В этот момент это становится простым случаем специализации:
template<> struct initialize_me<bool> {
inline static void please(internalEntity *me, const std::string &name)
{
boolCloud whatever_this_is;
me->initEntity(whatever_this_is, name);
}
};
И аналогично для любой другой необходимой специализации. Из вашего вопроса непонятно, откуда берется первый параметр для перегруженных initEntity
. Если они являются членами одного класса, они могут быть переданы здесь через указатель me
, как правило. Если необходимо, чтобы ограничить доступ, вспомогательный класс может быть friend
.
. Он становится немного более точным, если инициализация должна произойти в секции инициализации конструктора, и не может быть передана в тело. как в этой ситуации. Тогда решение будет зависеть от точных деталей, и конкретный пример, например c, потребуется, прежде чем выяснить решение.