2013-03-01 80 views
0

我分手的圓形包括通過向前宣佈在其各自的標題的類的依賴性,但是這使小皺紋在現有常規使用一個類的內部的類型別名:是否有可能使用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

回答

2

不,你不能把類放在類的內部,除非實際在類定義中寫入它。

這不是一個C是否是完整類型的問題。只是C++沒有任何允許將名稱添加到類作用域(或任何作用域)的語法,而不是通過實際將其寫入該作用域中。

+0

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