我通过在各自的标头中声明类来分解循环包含依赖关系,但这在现有的在类中使用类型别名的约定中引起了一些小问题:
#include <memory>
class C {
public:
using Ptr = std::shared_ptr<C>;
};
理想情况下,可以执行以下操作:
#include <memory>
class C;
using C::Ptr = std::shared_ptr<C>;
但这是不可能的,因为C
不是一个完整的类型(还)。我意识到可以创建一个别名using CPtr = std::shared_ptr<C>;
,但我希望我遗漏一些显而易见的东西使用typename
或其他一些关键字来建立C
作为一个完整的类型用于此目的创建嵌套类型别名。
答案 0 :(得分:2)
不,除了通过在类定义中实际写入内容之外,你不能在类中添加内容。
这不是C
是否是完整类型的问题。简单地说,C ++没有任何语法允许将名称添加到类范围(或任何范围),而不是通过在该范围内实际编写它。