Я хочу, чтобы класс оставался простым и не определял конструктор, поэтому я могу сделать Pt data = {0, 5}; поэтому я решил, что лучший способ преобразовать Pt_t из короткого в длинный или наоборот - это сделать что-то вроде этого.
template <class T>
struct Pt_t
{
T x, y;
template <class T2> operator Pt_t<T2>() { Pt_t pt = {x, y}; return pt; }
};
Компилятору это не нравится, и он вызывает оператор Pt_t при возврате pt; таким образом происходит переполнение стека. Как мне предотвратить это? единственное решение, которое я могу придумать, - использовать конструкторы Pt_t, удаляющие Pt_t pt = {1, 2}; которую я предпочитаю оставить, если могу.





Я не знаком с C++, но объявляете ли вы там правильный тип в своем методе?
Разве это не должно быть Pt_t<T2>, а не просто Pt_t?
Я почти уверен, что неквалифицированный Pt_t в теле ваших функций - это Pt_t<T>, но разве вы не хотите, чтобы это был Pt_t<T2>? Вам нужно будет явно указать это.
Спасибо, это была моя ошибка. Для тех, кто хочет увидеть код, правильная функция - template <class T2> operator Pt_t <T2> () {Pt_t <T2> pt = {x, y}; return pt; }
Укажите язык в теге вашего вопроса.