考虑如下情况:
template<typename T>
class A { ... };
template<typename T, typename DataType = std::vector<A<T>>>
class B {
....
DataType data;
...
}
Run Code Online (Sandbox Code Playgroud)
在我的例子中DataType,类型可以是任何std“容器”,但它必须始终专门针对类型A。A的使用对于类B之外应该是透明的,但是在没有默认类型的B的定义中DataType应该明确指定例如B<int, std::deque<A<int>>。我想消除这种可能性并实现类似的目标:
template<typename T, typename container = std::vector>
class B{
using DataType = container<A<T>>;
...
}
Run Code Online (Sandbox Code Playgroud)
这样我就可以专注于 B 之类的B<int, std::vector>。当然它不能完全像这样,因为container在这种情况下应该是一个完整的类型,然后必须专门化。有没有办法用 c++14 来实现这一点?
我正在尝试为我的项目中的每个类添加一个 shared_ptr 的类内别名,如下所示:
class Foo {
/* ... */
public:
using Ptr = std::shared_ptr<Foo>;
};
Run Code Online (Sandbox Code Playgroud)
这样我就可以使用速记定义指向 Foo 的共享指针Foo::Ptr fooObjPtr;。有没有什么方法可以创建一个自动添加别名的宏?就像是:
#define DEFINE_SHARED using Ptr = std::shared_ptr<__CLASS_NAME__>;
class Foo {
/* ... */
public:
DEFINE_SHARED
};
Run Code Online (Sandbox Code Playgroud)