Вот такое преобразование типов...
От: Доброжелатель Россия  
Дата: 23.09.03 11:22
Оценка:
Вот интересно, можно ли написать что-нибудь такое:
struct B;

struct A
{
  int x;
  operator B()
  {
    B r;
    r.a.x = 0;
    r.b.x = x;
    return r;
  }
};

struct B
{
  A a;
  A b;
};
Не все в этом мире можно выразить с помощью нулей и единиц...
Re: Вот такое преобразование типов...
От: Anton V. Kolotaev  
Дата: 23.09.03 11:33
Оценка:
Здравствуйте, Доброжелатель, Вы писали:

Д>Вот интересно, можно ли написать что-нибудь такое:


Нет.
Д>
Д>struct B;

Д>struct A
Д>{
Д>  int x;
Д>  operator B() // Поскольку здесь тип B должен быть полным
Д>  {
Д>    B r;
Д>    r.a.x = 0;
Д>    r.b.x = x;
Д>    return r;
Д>  }
Д>};

Д>struct B
Д>{
Д>  A a;
Д>  A b;
Д>};
Д>
Re: Вот такое преобразование типов...
От: jazzer Россия Skype: enerjazzer
Дата: 23.09.03 11:34
Оценка:
Здравствуйте, Доброжелатель, Вы писали:

Д>Вот интересно, можно ли написать что-нибудь такое:

Д>
Д>struct B;

Д>struct A
Д>{
Д>  int x;
Д>  operator B()
Д>  {
Д>    B r;
Д>    r.a.x = 0;
Д>    r.b.x = x;
Д>    return r;
Д>  }
Д>};

Д>struct B
Д>{
Д>  A a;
Д>  A b;
Д>};
Д>


конечно, можно, просто вынеси определение оператора приведения за пределы класса, когда и А, и B уже будут определены.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[2]: Вот такое преобразование типов...
От: Anton V. Kolotaev  
Дата: 23.09.03 11:45
Оценка:
Здравствуйте, Anton V. Kolotaev, Вы писали:

Д>>Вот интересно, можно ли написать что-нибудь такое:


AVK>Нет.


Посыпаю голову пеплом. jazzer прав. Достаточно определить operator B позже определения класса B.
Re: Вот такое преобразование типов...
От: Павел Кузнецов  
Дата: 23.09.03 11:46
Оценка:
Здравствуйте, Доброжелатель, Вы писали:

Д> Вот интересно, можно ли написать что-нибудь такое: <...>


struct B;

struct A
{
  int x;
  operator B(); // только объявление
};

struct B
{
  A a;
  A b;
};

// определение после определения B
A::operator B()
{
  B r;
  r.a.x = 0;
  r.b.x = x;
  return r;
}
Posted via RSDN NNTP Server 1.7 "Bedlam"
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re: Вот такое преобразование типов...
От: MaximE Великобритания  
Дата: 23.09.03 11:47
Оценка:
Здравствуйте, Доброжелатель, Вы писали:

Д>Вот интересно, можно ли написать что-нибудь такое:


Можно, но зачем?
Re: Вот такое преобразование типов...
От: Lorenzo_LAMAS  
Дата: 23.09.03 11:53
Оценка: +1
Я б еще для "красоты" (если это не вижуал конечно) от forward-declaration избавился бы

class A
{
public:
    operator class B()const;
};

class B{};

A::operator B()const
{
    return ::B();
}
Of course, the code must be complete enough to compile and link.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.