template<class A, class B>
class C: public A<B>
{
B m_b;
...
};
...
//Определение объекта
C<MyClass, int> c;
Компилятор ругается. Почему так нельзя, и как обойти ? Я придумал(вернее подсмотрел) только так:
template<class BBB>
class AAA
{
public:
typedef BBB B;
...
};
template<class A>
class C: public A
{
public:
typename A::B m_b;
...
};
...
//Определение объекта
C<MyClass<int> > c;
Кстати, компилятор от Intel компилирует без выделенного typename, MS компилятор без typename ругается.
Здравствуйте, Ka3a4oK, Вы писали: KK>Компилятор ругается. Почему так нельзя, и как обойти ? Я придумал(вернее подсмотрел) только так:
KK>
KK>template<class BBB>
KK>class AAA
KK>{
KK>public:
KK> typedef BBB B;
KK> ...
KK>};
KK>template<class A>
KK>class C: public A
KK>{
KK>public:
KK> typename A::B m_b;
KK> ...
KK>};
KK>...
KK>//Определение объекта
KK> C<MyClass<int> > c;
KK>
KK>Кстати, компилятор от Intel компилирует без выделенного typename, MS компилятор без typename ругается.
Неправильно ругается. A::B независимо от параметра шаблона С, typename по желанию можно писать или опускать.
C++ можно выучить за 21 день! ...если дни — полярные.
Здравствуйте, __LP, Вы писали:
__L>Здравствуйте, __LP, Вы писали: __L> A::B независимо от параметра шаблона С, typename по желанию можно писать или опускать. __L>не зависит :shuffle:
Млин что-то у меня со зрением — зависит! typename нужно :)
C++ можно выучить за 21 день! ...если дни — полярные.
Здравствуйте, Ka3a4oK, Вы писали:
KK>Хочу сделать так:
KK>
KK>template<class A, class B>
KK>class C: public A<B>
KK>{
KK> B m_b;
KK> ...
KK>};
KK>...
KK>//Определение объекта
KK> C<MyClass, int> c;
KK>
KK>Компилятор ругается. Почему так нельзя, и как обойти ? Я придумал(вернее подсмотрел) только так:
А если нужно без параметров-шаблонов, то еще такой способ:
определить в шаблоне А структуру rebind:
class dummy{};
template<class T = dummy>
class A
{
public:
template<class O>
struct rebind
{
typedef A<O> other;
};
};
template<class A, class B>
class C: public A:: template rebind<B>::other
{
//...
};
int main()
{
C<A<>, int> c;
}
C++ можно выучить за 21 день! ...если дни — полярные.