【发布时间】:2016-02-18 16:26:33
【问题描述】:
我刚刚完成了我正在编写的库的迭代。 为了隔离某些类型,我最初将它们放入命名空间中。 然后,我意识到这个命名空间实际上应该是模板化的,所以我把它变成了一个结构,即:
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 <typename T> using foo = _foo<T>; },然后在MyClass中:using foo_type = A::foo<T>;(您重复T,但去掉typename)。顺便说一句,这并不能解决您的固定参数。
标签: c++ c++11 struct namespaces using