小编Nic*_*ini的帖子

具有部分固定参数列表的 C++ 模板

考虑如下情况:

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 来实现这一点?

c++ templates c++-templates

4
推荐指数
1
解决办法
319
查看次数

带有宏的类中的 C++ 自动 shared_ptr 类型

我正在尝试为我的项目中的每个类添加一个 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)

c++ smart-pointers shared-ptr c++11

3
推荐指数
1
解决办法
143
查看次数