Как извлечь шаблонный класс шаблона из boost::enable_shared_from_this?
Как можно извлечь класс шаблона с шаблонным типом из boost::enable_shared_from_this?
template<template<class T> class Container>
class Myclass : public boost::enable_shared_from_this<?> {
};
Это не компилируется:
template<template<class T> class Container>
class Myclass : public boost::enable_shared_from_this<Myclass<Container<T> > > {
};
Ошибка: "Myclass" не является типом шаблона.
2 ответа
Решение
Поскольку ваш класс определяется шаблоном шаблона шаблона - вы должны просто использовать Containter
,
template<template<class> class Container>
class Myclass : public boost::enable_shared_from_this<Myclass<Container> >
{
};
Обычно вы используете boost::enable_shared_from_this
следующим образом
class Myclass
: public boost::enable_shared_from_this<Myclass>
{
// ...
};
Если у вас есть шаблон, это изменится на
template<class T>
class Myclass
: public boost::enable_shared_from_this<Myclass<T> >
{
// ...
};
куда Myclass<T>
это тип, который вы бы использовали для объявления в другом контексте. Вы должны написать полное имя класса с аргументами шаблона. Краткая форма MyClass
допускается только внутри определения.
И для параметров шаблона шаблона вы должны использовать
template<template<class> class T>
class Myclass
: public boost::enable_shared_from_this<Myclass<T> >
{
// ...
};
Что является ответом ForEveRs.