Re: Интерфейсы и наследсвование.
От: Cyberax Марс  
Дата: 14.11.05 05:09
Оценка: -1
timai wrote:

> Компилятор ругается — якобы pure virtual function was not defined.

> Не подскажете как это можно обойти? Или как-нибудь другие решения...


class CObject : public CBase, IObject
{
public:
  using CBase::Release;
  void Test (void) {}
};


--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Интерфейсы и наследсвование.
От: timai  
Дата: 14.11.05 04:21
Оценка:
Вопрос в следующем.
Хочеться сделать вот такое:
struct IObject
{
  virtual void Release (void) PURE;
};
class CBase
{
public:
  void Release (void) {}
};
class CObject : public CBase, IObject
{
public:
  void Test (void) {}
};
void TestFunc (void)
{
  CObject Obj;
  Obj.Test ();
  Obj.Release ();
}


Компилятор ругается — якобы pure virtual function was not defined.
Не подскажете как это можно обойти? Или как-нибудь другие решения...
Re: Интерфейсы и наследсвование.
От: sergey_shandar США http://getboost.codeplex.com/
Дата: 14.11.05 04:39
Оценка:
Здравствуйте, timai, Вы писали:

T>Компилятор ругается — якобы pure virtual function was not defined.

T>Не подскажете как это можно обойти?

Например так:
struct CObject: CBase, IObject
{
  void Rlease() { CBase::Release(); }
};


T>Или как-нибудь другие решения...


Если же CBase реализует какой то базовый интерфейс, например IUnknown, как в COM. Тогда можно сделать CBase шаблонным:
template<class Interface>
struct CBase: Interface
{
  void Release() { /*...*/ }
};


Соответственно:
struct CObject: CBase<IObject> {};
getboost.codeplex.com
citylizard.codeplex.com
Re: Интерфейсы и наследсвование.
От: Pavel Chikulaev Россия  
Дата: 14.11.05 06:47
Оценка:
Здравствуйте, timai, Вы писали:

T>Компилятор ругается — якобы pure virtual function was not defined.

T>Не подскажете как это можно обойти? Или как-нибудь другие решения...

http://www.gotw.ca/gotw/039.htm
Re[2]: Интерфейсы и наследсвование.
От: timai  
Дата: 14.11.05 07:23
Оценка:
Здравствуйте, Cyberax, Вы писали:
class CObject : public CBase, IObject
{
public:
  using CBase::Release;
  void Test (void) {}
};


Хм... то же самое. Компилятор все равно спотыкается...
Re[2]: Интерфейсы и наследсвование.
От: timai  
Дата: 14.11.05 07:32
Оценка:
Здравствуйте, sergey_shandar, Вы писали:

_>Например так:

_>
_>struct CObject: CBase, IObject
_>{
_>  void Rlease() { CBase::Release(); }
_>};
_>


Спасибо, заработало.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.