Как вывести шаблонный класс шаблона из 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» не является типом шаблона.

0

Решение

Так как ваш класс основан на параметре шаблона шаблона — вы должны просто использовать Containter,

template<template<class> class Container>
class Myclass : public boost::enable_shared_from_this<Myclass<Container> >
{
};
1

Другие решения

Обычно вы используете 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.

1

По вопросам рекламы [email protected]