Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> перегрузка оператора точка? 
:(
    Опции темы
victor79
Дата 15.8.2011, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 15.5.2008

Репутация: нет
Всего: нет



есть желание сделать обертку для класса, не переписывая ни класс, ни его использование в куче кода. Максимум - попереименовывать класс и его префиксы методов. И единственное препятствие - невозможность перегрузить оператор точка, по подобию как можно это сделать с оператором ->. Есть ли какое решение вопроса в указанных выше рамках или другими минимальными изменениями?
Класс используется и в стековых переменных и через new.


общая цель: экземпляры этого класса очень много возвращаются в виде результата функции. При этом происходит вызов конструктора копий и после деструктора возвращенного. Вместо этого сделать обертку, в которой хранить только указатель, а сам объект выделять в конструкторе обертки и распускать в деструкторе, если при этом он не был перемещен в другой экземпляр обертки.

Это сообщение отредактировал(а) victor79 - 15.8.2011, 22:33
PM MAIL WWW   Вверх
alexvs11
Дата 15.8.2011, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 21.8.2010

Репутация: 6
Всего: 10



сделать руками делегирование, либо унаследовать интерфейс, но делегирование все-равно придется руками делать

Код

class A
{
public:
   int method(){ return 5; }
};

class Wrapper
{
public:
   Wrapper( A* data ) : m_data( data ) {}
   int method(){ return m_data->method(); }
   // ....
   // ....
   A* operator->(){ return m_data; }
   A& operator*(){ return *m_data; } 
private:
   A* m_data; 
};

int main()
{
   A* a = new A;
   Wrapper w(a);
   w.method();
   Wrapper* p_w = new Wrapper(a);
   p_w->method();
   (*p_w).method();
   delete p_w;
   delete a;       
}


Добавлено через 6 минут и 48 секунд
впрочем унаследоваться от него можно на случай если есть какого-либо рода приведения, но лучше от интерфейса
PM MAIL   Вверх
kosmonaFFFt
Дата 16.8.2011, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 538
Регистрация: 14.4.2008
Где: Иннополис

Репутация: нет
Всего: 5



А не подойдут ли для этой цели смартпойнтеры?


--------------------
user posted image
PM MAIL ICQ   Вверх
alexvs11
Дата 16.8.2011, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 21.8.2010

Репутация: 6
Всего: 10



kosmonaFFFt, объекты кроме всего прочего создаются на стеке..
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0547 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.