Я только что закончил итерацию в библиотеке, которую я пишу. Чтобы изолировать определенные типы, я изначально помещал их в пространство имен. Тогда я понял, что это пространство имен на самом деле должно быть шаблонный, поэтому я включил его в структуры, а именно:Использование структуры шаблона в качестве пространства имен
namespace A
{
typedef _foo foo;
}
стал
template <class T>
struct A
{
typedef _foo<T> foo;
};
Это было более удобно использовать, скажем, такой ситуации:
template <class T>
class MyClass
{
public:
typedef A<T> nsA;
typedef typename nsA::foo foo_type;
};
Теперь я использую эту библиотеку в другой библиотеке, и там, я знаю, что тип шаблона T
никогда не изменится. Поэтому я хотел бы сделать что-то вроде:
namespace B
{
using namespace A<double>;
}
, но, очевидно, это не работает. Конечно, я мог бы просто перестать быть ленивым, и typedef
вручную каждое определение в A<double>
, но мне нравится быть ленивым, когда я могу. Любые мысли о том, как сделать что-то эквивалентное этому последнему шагу?
В C++ 11 вы можете псевдоним всего вашего шаблона: 'namespace A {template using foo = _foo ; } ', а затем в' MyClass': 'using foo_type = A :: foo ;' (вы повторяете 'T', но избавляетесь от' typename'). Это не решает ваш фиксированный параметр btw. –
Jarod42