crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> инстанцирование шаблона
vizir1989
  опции профиля:
сообщение 24.12.2012, 20:35
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 12
Регистрация: 14.5.2012
Пользователь №: 3377

Спасибо сказали: 0 раз(а)




Репутация:   0  


Доброго времени суток.
В ходе написания программы возник следующий вопрос.
У меня есть базовый шаблонный класс. От него наследуются другие классы (тоже шаблоны). И в этих классах приходится писать следующие:
className<T1, T2>::funcName(x, y);

и у меня возник вопрос, а можно ли инстанцировать базовый класс в потомке один раз, а не постоянно писать className<T1, T2>?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 25.12.2012, 6:48
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


вариант №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;
}


Сообщение отредактировал Алексей1153 - 25.12.2012, 6:58
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ssoft
  опции профиля:
сообщение 25.12.2012, 10:29
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 130
Регистрация: 17.2.2010
Из: Москва
Пользователь №: 1470

Спасибо сказали: 30 раз(а)




Репутация:   3  


Цитата(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() );           // либо так
    }
};
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 20.4.2024, 19:27