使用模板结构作为命名空间
Using a template structure as a namespace
我刚刚完成了对我正在编写的库的迭代。
为了隔离某些类型,我最初将它们放入命名空间。
然后,我意识到这个命名空间实际上应该是模板化的,所以我把它变成了一个结构体,即:
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>
{};
这里是demo.
我刚刚完成了对我正在编写的库的迭代。 为了隔离某些类型,我最初将它们放入命名空间。 然后,我意识到这个命名空间实际上应该是模板化的,所以我把它变成了一个结构体,即:
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>
{};
这里是demo.