Имеется такой код:
(смартпойнтеры выкинуты для ясности)
#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" закрыть
но, так чтобы везде собиралось
возможно это ошибка борланда,
тогда вопрос — как бы это обойти?
а если попробовать класс А другом класса I объявить? Глупо конечно, но что делать, если глючит
Здравствуйте, Аноним, Вы писали:
А>а если попробовать класс А другом класса I объявить? Глупо конечно, но что делать, если глючит
в интерфейсе перечислить реализации?
не подумал. действительно бред.