2013-11-20 71 views
3

我有這暴露了一個模板類,並通過使用一個typedef,像頭:C++正向聲明使用指令

namespace fancy { 

    struct Bar { 
    ... 
    } 

    template<typename T> 
    class Foo { 
    ... 
    } 

    using FooBar = Foo<Bar>; 
} 

我想轉發聲明FooBar在另一頭用它在shared_ptr。我試過

namespace fancy { 
    using FooBar; 
} 

喜歡一個類或結構,但沒有運氣。這是可能的,如果是的話,如何?

回答

7

如果不定義它,則不能聲明using別名。

namespace fancy { 
    template <typename> class Foo; 
    class Bar; 
    using FooBar = Foo<Bar>; 
} 
+0

如果我嘗試,我得到'錯誤:「用FooBar的=類Foo 」有先前的聲明爲「使用您可以聲明類模板然而沒有定義它,並使用重複using別名FooBar = class Foo ''用gcc 4.8.1。 –

+0

gcc(4.9.0 20131031(experimental))和clang(版本3.4(trunk 193991))相對最近的頭都是在沒有代碼的情況下編譯由我的聲明組成的代碼(通過添加分號和刪除'...'問題。然而,Clang抱怨'Bar'的'struct'和'class'之間不匹配。 –

+0

謝謝我明白了,你是對的。 –