テンプレート パラメーターとして渡される型のバリアントである内部型を作成するクラスを設計したいと考えています。次のような非機能的な例:
template <typename T>
class BaseClass
{
public:
typedef T InternalType;
std::vector<InternalType> storage;
};
template <typename Base>
class Injector
{
public:
typedef std::pair<typename Base::InternalType, typename Base::InternalType> RefinedType;
Base<RefinedType> refinedStorage;
};
typedef Injector<BaseClass<int> > InjectedInt; // Should store vector<pair<int, int> >
Base
は完全に指定された型であるためBase<RefinedType> refinedStorage;
、コンパイルに失敗します。洗練された型は、ネストされたテンプレートのパラメーターとその基本型に基づく必要があるため、テンプレート テンプレート パラメーターを使用するだけでは機能しません。
テンプレート パラメーターの完全に指定された型と基本型の両方に基づいて型を作成するこのパターンを実装するにはどうすればよいですか?
編集:これは、変換のカスケードを実行する複数のインジェクタータイプを備えた、任意の深さのコンポジットにしたいと考えています。したがって、テンプレート テンプレート パラメーターとベース パラメーターの両方を渡すことはかなり扱いにくくなり (特に、コンポジットのベース ケースを処理する場合)、理想的な解決策はより直接的な構文を使用することです。