是否有可能使用C++ 11中的前向声明类声明嵌套类型别名?

是否有可能使用C++ 11中的前向声明类声明嵌套类型别名?

问题描述:

我分手的圆形包括通过向前宣布在其各自的标题的类的依赖性,但是这使小皱纹在现有常规使用一个类的内部的类型别名:是否有可能使用C++ 11中的前向声明类声明嵌套类型别名?

#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

您是否尝试过使用指针的typedef? 'typedef C * ForwardedCClass;'? – OzBarry 2013-03-01 20:59:25

+2

'C'总是一个“有效的标识符”,并且在前向声明后立即是一个有效的“类型名称”,但直到类定义时才是“完整类型”。 – aschepler 2013-03-01 20:59:37

+0

谢谢。更新问题中的措词更加正确。 – Sean 2013-03-01 21:01:37

不,你不能把类放在类的内部,除非实际在类定义中写入它。

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

+0

我害怕有人会说。 – Sean 2013-03-01 21:04:14