如何从boost :: enable_shared_from_this派生模板模板类?

时间:2013-07-12 11:32:09

标签: c++ boost shared-ptr template-templates

如何从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 个答案:

答案 0 :(得分:1)

由于您的课程是模板模板参数模板化的,因此您应该只使用Containter

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

答案 1 :(得分:1)

Normaly你以下列方式使用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的答案。