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

C++ 使用模板结构作为命名空间,c++,c++11,struct,namespaces,using,C++,C++11,Struct,Namespaces,Using,我刚刚完成了我正在编写的一个库的迭代。 为了隔离某些类型,我最初将它们放在一个名称空间中。 然后,我意识到这个名称空间实际上应该是模板化的,所以我把它变成了一个结构,即: namespace A { typedef _foo foo; } 变成 template <class T> struct A { typedef _foo<T> foo; }; 但很明显,这是行不通的。当然,我可以停止懒惰,然后手动地在A中定义每个定义,但我喜欢在可以的时候懒惰。

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

namespace A
{
    typedef _foo foo;
}
变成

template <class T>
struct A
{
    typedef _foo<T> foo;
};

但很明显,这是行不通的。当然,我可以停止懒惰,然后手动地在
A
中定义每个定义,但我喜欢在可以的时候懒惰。关于如何做与最后一步相当的事情,你有什么想法吗?

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

由于我首先使用结构作为名称空间,所以解决方案是继续使用结构作为名称空间(!):

结构B :公众A {};
这里是一个。

顺便说一句,继承在默认情况下是
public
struct
,因此您可以简化为
structb:a{}。在c++11中,您可以将所有模板别名为:
名称空间A{template using foo=\u foo;}
,然后在
MyClass
中:
using foo\u type=A::foo
(重复
T
,但去掉
typename
)。顺便说一句,这并不能解决你的固定参数问题。
template <class T>
class MyClass
{
public:
    typedef A<T>               nsA;
    typedef typename nsA::foo  foo_type;
};
namespace B
{
    using namespace A<double>;
}
struct B
    : public A<double>
{};