У меня есть класс с конструктором шаблона, и код фактически вызывает конструктор copy после конструктора по умолчанию, что не имеет смысла для меня, так как тип неправильный.
Например:
class A
{
public:
A(void); // default constructor
A(const A& other); // copy constructor
template<class TYPE>
A(const TYPE& object_to_ref); // template constructor
};
Этот конструктор шаблона работает (правильно вызывается в других случаях), но не распознается как "правильный"конструктор из другой шаблонной функции:
template<class TYPE>
A& CreateA(const TYPE& object_to_ref)
{
// THIS FUNCTION IS NEVER SPECIALIZED WITH "A", ONLY WITH "B" !!
return *new A(object_to_ref); // CALLS "A::A(const A&)" !!??
}
Пример сбоя:
B my_b;
A& my_a = CreateA(my_b); // "A::A(const A&)" called, not "A::A(const B&)"!
Это не имеет смысла для меня.Типы неверны, чтобы соответствовать конструктору копирования.Что случилось?(MSVC2008)
Мой обходной путь - не использовать конструктор шаблона в этом случае:
template<class TYPE>
A& CreateA(const TYPE& object_to_ref)
{
A* new_a = new A(); //DEFAULT CONSTRUCTOR
new_a->setObjectToRef(object_to_ref); //OTHER TEMPLATE MEMBER FUNCTION
return *new_a;
}
ВОПРОС: Почему конструктор шаблона не вызывался в этом случае?
(Обход, кажется, работает должным образом, вы предлагаете альтернативу?)
РЕДАКТИРОВАТЬ: B
не имеет отношения, преобразования между * не указаны1032 * и / или A
:
class B
{
};