оператор ThisClass () вызывает переполнение стека - PullRequest
1 голос
/ 22 декабря 2008

Я хочу сохранить класс простым и не определять конструктор, чтобы я мог сделать 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}; который я предпочитаю оставить, если смогу.

Ответы [ 2 ]

5 голосов
/ 22 декабря 2008

Я почти уверен, что безусловный Pt_t в теле вашей функции равен Pt_t<T>, но разве вы не хотите, чтобы он был Pt_t<T2>? Вам нужно будет явно указать его.

1 голос
/ 22 декабря 2008

Я незнаком с C ++, но вы объявляете правильный тип в вашем методе?

Разве это не должно быть Pt_t<T2> вместо Pt_t?

...