Как извлечь шаблонный класс шаблона из 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.

Другие вопросы по тегам