Хитрый шаблон
От: Ka3a4oK  
Дата: 15.10.05 17:00
Оценка:
Хочу сделать так:

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 ругается.
... << RSDN@Home 1.1.4 stable rev. 510>>
Re: Хитрый шаблон
От: __LP  
Дата: 15.10.05 17:06
Оценка: 4 (1)
Здравствуйте, 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>Компилятор ругается. Почему так нельзя, и как обойти ? Я придумал(вернее подсмотрел) только так:


template<template<class> class A, class B>
class C: public A<B>
{
...
};
C++ можно выучить за 21 день! ...если дни — полярные.
Re: Хитрый шаблон
От: __LP  
Дата: 15.10.05 17:11
Оценка:
Здравствуйте, 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 день! ...если дни — полярные.
Re[2]: Хитрый шаблон
От: __LP  
Дата: 15.10.05 17:12
Оценка:
Здравствуйте, __LP, Вы писали:
A::B независимо от параметра шаблона С, typename по желанию можно писать или опускать.
не зависит
C++ можно выучить за 21 день! ...если дни — полярные.
Re[3]: Хитрый шаблон
От: __LP  
Дата: 15.10.05 17:18
Оценка:
Здравствуйте, __LP, Вы писали:

__L>Здравствуйте, __LP, Вы писали:

__L> A::B независимо от параметра шаблона С, typename по желанию можно писать или опускать.
__L>не зависит :shuffle:

Млин что-то у меня со зрением — зависит! typename нужно :)
C++ можно выучить за 21 день! ...если дни — полярные.
Re: Хитрый шаблон
От: __LP  
Дата: 15.10.05 18:16
Оценка:
Здравствуйте, 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 день! ...если дни — полярные.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.