Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: инстанцирование шаблона
Форум на CrossPlatform.RU > Разработка > С\С++
vizir1989
Доброго времени суток.
В ходе написания программы возник следующий вопрос.
У меня есть базовый шаблонный класс. От него наследуются другие классы (тоже шаблоны). И в этих классах приходится писать следующие:
className<T1, T2>::funcName(x, y);

и у меня возник вопрос, а можно ли инстанцировать базовый класс в потомке один раз, а не постоянно писать className<T1, T2>?
Алексей1153
вариант №1: всё оставить в теле объявления класса
вариант №2: сделать псевдонимы шаблонных типов

template<class T1, class T2>
class className
{
public:
     typedef T1 td_T1;
     typedef T2 td_T2;
};

class CChildClass:public className<int, int>
{
public:
     CChildClass();
     ~CChildClass();

     td_T2 funcName(td_T1 x, td_T1 y);
};

CChildClass::CChildClass()
{
}

CChildClass::~CChildClass()
{
}

CChildClass::td_T2 CChildClass::funcName(td_T1 x, td_T1 y)
{
    return x+y;
}
ssoft
Цитата(vizir1989 @ 24.12.2012, 21:35) *
Доброго времени суток.
В ходе написания программы возник следующий вопрос.
У меня есть базовый шаблонный класс. От него наследуются другие классы (тоже шаблоны). И в этих классах приходится писать следующие:
className<T1, T2>::funcName(x, y);

и у меня возник вопрос, а можно ли инстанцировать базовый класс в потомке один раз, а не постоянно писать className<T1, T2>?



Я обычно пишу так

template < typename _Type >
class A
{
public:
    void setValue ( const _Type & value );
};

template < typename _Type >
class B : public A< _Type >
{
    typedef B< _Type > ThisType;
    typedef A< _Type > ParentType;

public:
    // примеры использования

    B ( const ThisType & other );
    B ( const ParentType & other );

    void init ()
    {
        ParentType::setValue( _Type() ); // либо так
        this->setValue( _Type() );           // либо так
    }
};
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.