2012-12-17 130 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