объявление friend class в шаблонном классе (VC6.0)
От: denos  
Дата: 17.06.04 10:13
Оценка:
Добрый день!
Такая проблема — в следующем коде внутри шаблона непрапвильно выбирается определение класса CreatePolicy и выдаётся ошибка

C:\work\projects\test\test.cpp(18) : error C2027: use of undefined type 'CreatePolicy'
C:\work\projects\test\test.cpp(15) : see declaration of 'CreatePolicy'

то есть декларацией компилятор считает почему то friend class CreatePolicy, а не параметр щаблона.
На других компиляторах проверить не могу — нет под рукой.

это по стандарту?

template <typename T>
class TNewCreatePolicy {
public:
static T * Create() {
return new T();
};
};

template <typename T, typename CreatePolicy = TNewCreatePolicy<T> >
class TObject {
friend class CreatePolicy;
public:
static T * Create() {
return CreatePolicy::Create();
}
};

class TInt : public TObject<TInt> {
private:
TInt() {};
};
Re: объявление friend class в шаблонном классе (VC6.0)
От: naje  
Дата: 17.06.04 10:22
Оценка: 15 (2)
Здравствуйте, denos, Вы писали:

D>это по стандарту?


это не по стандарту, но скоро должно там появится здесь
а пока решение проблемы здесь
Re[2]: объявление friend class в шаблонном классе (VC6.0)
От: denos  
Дата: 17.06.04 11:47
Оценка:
спасибо за краткий и содержательный ответ!

меня ещё вопрос появился по ходу — а есть пути как кнаследовать дружественность, то есть чтобы сделать так чтобы для всех потомков TObject<T,Cteator> Creator был friend?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.