0

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' はテンプレート タイプではありません。

4

2 に答える 2

1

あなたのクラスはテンプレートテンプレートパラメータによってテンプレート化されているので、単純にContainter.

template<template<class> class Container>
class Myclass : public boost::enable_shared_from_this<Myclass<Container> >
{
};
于 2013-07-12T11:38:08.007 に答える
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の答えです。

于 2013-07-12T12:16:36.867 に答える