реклама на сайте
подробности

 
 
> [C++] Использование типа из класса потомка, Рекурсивные шаблоны
smalcom
сообщение Sep 18 2015, 08:41
Сообщение #1


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

Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718



Хотел использовать следующую конструкцию(вариант 1)

Код
template<typename TDerived>
class CBase
{
public:

    typename TDerived::DesiredType foo()
    {
    }
};

template<typename TDesiredType>
class CDerived : public CBase<CDerived<TDesiredType> >
{
public:

    typedef TDesiredType DesiredType;
};

CDerived<uint8_t> derived;


Основное желание - использовать в CBase тип из CDerived, переданный параметром шаблона - TDesiredType
Но компилятор не разделил мои желания и сказал:
Цитата
error: no type named 'DesiredType' in 'class Driver::CDerived<unsigned char>'


Переделал под более простой вариант 2. Но пропала элегантность:
Код
template<typename TDerived, typename TDesiredType>
class CBase
{
public:

    TDesiredType foo()
    {
    }
};

template<typename TDesiredType>
class CDerived : public CBase<CDerived<TDesiredType>, TDesiredType>
{
};

CDerived<uint8_t> derived;


Есть ли способ использовать вариант 1?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
smalcom
сообщение Sep 18 2015, 14:33
Сообщение #2


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

Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718



Вобщем, так как я хотел не получится. Так как надо указывать TDerived вместе с параметрами, тогда тип будет виден.Но в данном случае это глупо, используется при других способах проектирования.
Всё это блуждание побудило меня пересмотреть моё видение дерева классов, сделал немного по-другому.
Go to the top of the page
 
+Quote Post
CrimsonPig
сообщение Sep 18 2015, 16:35
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 329
Регистрация: 23-04-14
Пользователь №: 81 502



Цитата(smalcom @ Sep 18 2015, 15:33) *
Вобщем, так как я хотел не получится. Так как надо указывать TDerived вместе с параметрами, тогда тип будет виден.Но в данном случае это глупо, используется при других способах проектирования.
Всё это блуждание побудило меня пересмотреть моё видение дерева классов, сделал немного по-другому.


Борьба с парадигмами программирования окончилась победой парадигм sm.gif
Паттерн да, интересный, но использовать надо с оглядкой..
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 29th July 2025 - 10:54
Рейтинг@Mail.ru


Страница сгенерированна за 0.01394 секунд с 7
ELECTRONIX ©2004-2016