protected operator new & borland C
От: Аноним  
Дата: 20.11.03 10:17
Оценка:
Имеется такой код:
(смартпойнтеры выкинуты для ясности)

#include <stddef.h>

class I // базовый интерфейс, потомков которого нельзя создавать непосредственно
{
protected:
  // для этого закрываем new - пусть пишут псевдоконструкторы
  void* operator new(size_t s){return ::operator new(s);}
public:
  virtual void op() = 0;
};

template<class T> class Impl : public T // шаблон реализующий некоторые операции интерфейса
{
public:
  virtual void op(){}
};

class A : public I // класс реализующий интерфейс
{
public:
  static A* q() // псевдоконструктор
  {
    return new Impl<A>;
  }
};

int main()
{
  A* a = A::q(); // создание класса
  return 0;
}


VC6, VC7 и Comeau такое понимают
а вот Borland C Builder 6 отказывается
вопрос — как бы так стандартным образом "operator new" закрыть
но, так чтобы везде собиралось
возможно это ошибка борланда,
тогда вопрос — как бы это обойти?
Re: protected operator new & borland C
От: Аноним  
Дата: 20.11.03 11:24
Оценка:
А что не так с борландом?
Re[2]: protected operator new & borland C
От: wvk_ Россия  
Дата: 20.11.03 11:46
Оценка:
Здравствуйте, Аноним, Вы писали:

А>А что не так с борландом?


борланд говорит:
Error E2247 1.cpp 22: 'I::operator new(unsigned int)' is not accessible in function A::q()
Re[3]: protected operator new & borland C
От: Аноним  
Дата: 20.11.03 11:48
Оценка:
а если попробовать класс А другом класса I объявить? Глупо конечно, но что делать, если глючит
Re[4]: protected operator new & borland C
От: wvk_ Россия  
Дата: 20.11.03 11:50
Оценка:
Здравствуйте, Аноним, Вы писали:

А>а если попробовать класс А другом класса I объявить? Глупо конечно, но что делать, если глючит


в интерфейсе перечислить реализации?
Re[5]: protected operator new & borland C
От: Аноним  
Дата: 20.11.03 12:01
Оценка:
не подумал. действительно бред.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.