Мне нужен шаблонный класс с оператором шаблонного преобразования и конструктором по умолчанию, но моя первоначальная попытка не работает.
template<typename T>
class C
{
public:
C() {}
template<typename U>
operator U()
{
C<U> c; // (*)
c._a = dynamic_cast<U*>(_a);
return c;
}
private:
T* _a;
};
Но теперь, когда я пытаюсь создать экземпляр C,
template<typename T>
void F()
{
...
C<T> obj;
}
Оператор U () продолжает вызывать себя снова и снова в (*), в конечном счете, с ошибками.То же самое происходит, когда я определяю функцию, которая выполняет приведение извне, и вызываю ее из оператора U () - в этом случае нет вызова C :: C () из определения класса.
Тогда мне кажется, что оператор преобразования вызывается, когда я хочу вызвать конструктор по умолчанию - он, по сути, пытается преобразовать себя.Но, конечно же, есть способ сделать то, что я пытаюсь сделать?