3

私はこのようなクラスを持っています:

struct WorkItemResultData;

template <typename ExecutionPolicy>
class Engine
{
public:
    typedef std::shared_ptr<WorkItemResultData> WorkItemResultData_ptr;
}

typedefテンプレート引数に依存しません。クラスEngine::WorkItemResultData_ptr外で型を使用する方法はありますか?Engine

編集私はawoodlandが以下の解決策を提案したようにそれを使用できることを知っていますが、私のtypedefは型引数から独立しており、特定のエンジンタイプを指定せずにそれを実行できるようにしたいと考えています。

4

2 に答える 2

5

typedefはまったく依存しないためEngine、クラスから引き出すことができます。

typedef std::shared_ptr<WorkItemResultData> WorkItemResultData_ptr;

template <typename ExecutionPolicy>
class Engine {...};

カプセル化したままにしておきたい場合は、名前空間を使用するだけです。

namespace Engine
{
    typedef std::shared_ptr<WorkItemResultData> WorkItemResultData_ptr;
}
于 2012-05-10T09:31:52.117 に答える
4

Engine::WorkItemResultData_ptrEngineクラスの外で型を使用する方法はありますか?

はい。ただしtypename、テンプレートコンテキストにあるかどうかを言う必要があります。例:

template <typename T>
void foo() {
  typename Engine<T>::WorkItemResultData_ptr instance;
}

typedefタイプなしではアクセスできません。ただし、考えられる回避策は3つあります。

  1. typedefテンプレートの外!-タイプに依存しない場合は、テンプレートとはあまり関係がない可能性があります。
  2. ボッジを使用して、を参照してくださいEngine<void>::WorkItemResultData_ptr
  3. typedefを含み、そこから継承する非テンプレート基本クラスがあります。その後、非テンプレート基本クラスに正常にアクセスできます。
于 2012-05-10T09:19:51.073 に答える