Код
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;
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;
class CBase
{
public:
TDesiredType foo()
{
}
};
template<typename TDesiredType>
class CDerived : public CBase<CDerived<TDesiredType>, TDesiredType>
{
};
CDerived<uint8_t> derived;
Есть ли способ использовать вариант 1?