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

Using a template structure as a namespace

本文关键字:命名空间 结构      更新时间:2023-10-16

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

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

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

由于我首先使用结构作为命名空间

,因此解决方案是继续使用结构作为命名空间(!

struct B
    : public A<double>
{};

这是一个演示。