2012-12-17 171 views
1

我試圖做這樣的事情:多個可變參數參數

template <class ... Required> 
class Base 
{ 
    template <class First, class ... Rest> 
    void bar(First f, Rest ... r) 
    { 
     [...] 
     return bar(r...); 
    } 
    void bar() 
    { 
     return; 
    } 
    public: 
     template <class ... Optional> 
     void foo(Required ... r, Optional ... o) 
     { 
      [...] 
      bar(r...); //separate the required from the optional 
      bar(o...); 
     } 
}; 

class Child : Base<Foo1, Foo2> 
{ 
    public: 
     Child() 
     { 
      [...] 
      foo(foo1,foo2,foo3); 
     } 
} 

但第一bar呼叫接收所有的參數,而不是隻有Required的,而第二個呼叫接收任何參數, 。我錯過了多個可變參數嗎?編譯器不知道Required...Foo1,Foo2,其餘的是Optional

+0

您正在使用哪種編譯器?我用gcc 4.7.2和clang 3.3試了你的代碼,並且他們都產生了預期的輸出。 – rici

+0

通過gcc 4.6.3和鏗鏘3.0通過liveworkspace嘗試和鏗鏘3.0顯示您正在觀察的錯誤。 – rici

回答

1

我認爲這很可能是您使用的任何編譯器中的錯誤。我使用gcc 4.6.3和4.7.2以及鏗鏘3.0和3.3來嘗試它,除了鏗鏘3.0之外,它們都產生了預期的輸出。

+0

我正在使用Apple LLVM 4.1,很高興知道這是一個編譯器問題,我會更新並查看是否有幫助。也感謝'sizeof ...',我不知道這一點。 –

+0

LLVM沒有4.1版,大概你的意思是Xcode 4.1 –

+0

@LukeB。順便說一句,叮噹3.3是從昨天晚上的樹幹編譯而來的。您可能需要搜索他們的錯誤隊列,以瞭解行爲何時修復。我希望有更新可以幫助。 – rici