Я не знаю, возможно ли это вообще, но этого я хотел бы достичь: в шаблоном классе я хотел бы использовать пространство имен параметра шаблона ,Динамическое использование пространства имен на основе параметра шаблона
например.
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, любое решение для ускорения приветствуется.
Update
Будучи параметр шаблона P
сам точно так же как любой TypeN
параметра, это может быть правильный подход:
template<typename NAMESPACE>
class Foo
{
typedef typename NAMESPACE::Parameter MyParameter;
typedef typename NAMESPACE::Type1 MyType1;
typedef typename NAMESPACE::Type1 MyTypeN;
...
}
Готовы ли вы добавить некоторые материалы в каждое пространство имен, которое может быть использовано? –
Какова связь между 'P',' Type1' ... 'TypeN'. В некоторых случаях имеет смысл кодировать эти отношения в 'P' сам по вложенному типу. Затем вы можете просто использовать 'typename P :: Type1', и это будет разрешено для соответствующего' Type1' для 'P'. –
Очень вероятно, что то, что вам нужно достичь, не требует такого решения. Можете ли вы объяснить, почему, по-вашему, вам это нужно? –