1

我通过在其各自的标头中前向声明类来分解循环包含依赖项,但是这给在类中使用类型别名的现有约定带来了一个小问题:

#include <memory>

class C {
 public:
  using Ptr = std::shared_ptr<C>;
};

理想情况下,可以执行以下操作:

#include <memory>

class C;
using C::Ptr = std::shared_ptr<C>;

但这是不可能的,因为C它还不是一个完整的类型。我意识到可以创建一个 alias using CPtr = std::shared_ptr<C>;,但我希望我遗漏了一些明显的 usingtypename或一些其他关键字,这些关键字将建立C为一个完整的类型,以便创建一个嵌套类型别名。

4

1 回答 1

2

不,您不能将某些内容放入类中,除非将其实际写入类定义中。

这不是是否C完整类型的问题。只是 C++ 没有任何语法允许将名称添加到类作用域(或任何作用域),而不是通过在该作用域中实际编写它。

于 2013-03-01T21:02:39.727 回答