使用模板结构作为命名空间

时间:2016-02-18 16:26:34

标签: c++ c++11 struct namespaces using

我刚刚完成了我正在编写的库的迭代。 为了隔离某些类型,我最初将它们放入命名空间。 然后,我意识到这个命名空间实际上应该是模板化的,所以我把它变成了一个结构,即:

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>每个定义,但我喜欢懒惰。关于如何做与最后一步相同的事情的任何想法?

1 个答案:

答案 0 :(得分:1)

实际上,我刚刚找到答案。对不起,如果你认为这个问题没用,我会删除它,请在评论中告诉我。

因为我首先使用struct作为命名空间,所以解决方案是继续使用struct作为命名空间(!):

struct B
    : public A<double>
{};

这是This is the error image