それが実現可能かどうかはまったくわかりませんが、これを実現したいと思います。テンプレート化されたクラスでは、テンプレートパラメータの名前空間を使用したいと思います。
例えば。
template<class P>
class Foo
{
public:
Foo();
virtual ~Foo();
void doSomething(P&);
void doSomethingElse();
protected:
// There I'm hardcoding "namespace1" but that's what I'd like to
// be possibly dynamic
// (I'm assuming template parameter P = namespace1::Type)
void method1(namespace1::Type1&);
...
void methodN(namespace1::TypeN&);
}
// Again, supposing P == namespace1::Type then I want to be using namespace1
// everywhere in the implementation...
using namespace namespace1;
template<class P>
void Foo<P>::doSomething(P& parameter)
{
...
Type1 type1 = P.getType1(); // There namespace1::Type1 is returned !!
method1(type1);
...
}
template<class P>
void Foo<P>::doSomethingElse()
{
...
TypeN typen; // There I want to instanciate a namespace1::TypeN !!
...
}
...
もちろん、テンプレートを特殊化して、すべての可能な値に専用の実装を提供したくはありません。また、テンプレートパラメータP
のようなすべてのタイプを渡すことは避けたいので、それらがたくさんある可能性があります。Type1
TypeN
それは可能ですか?
プロジェクトはC++3ベースであり、ブーストソリューションは大歓迎です。
アップデート
テンプレートパラメータP
自体は他のパラメータとまったく同じTypeN
であるため、これは正しいアプローチである可能性があります。
template<typename NAMESPACE>
class Foo
{
typedef typename NAMESPACE::Parameter MyParameter;
typedef typename NAMESPACE::Type1 MyType1;
typedef typename NAMESPACE::Type1 MyTypeN;
...
}