Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 多变量参数_C++_Templates_C++11 - Fatal编程技术网

C++ 多变量参数

C++ 多变量参数,c++,templates,c++11,C++,Templates,C++11,我正在尝试这样做: 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 ... 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);
        }
}
模板
阶级基础
{
模板
空栏(第一个f,其余…r)
{
[...]
返回杆(r…);
}
空条()
{
返回;
}
公众:
模板
无效foo(必需的…r,可选的…o)
{
[...]
bar(r…);//将必需项与可选项分开
酒吧(o…);
}
};
类子:基
{
公众:
Child()
{
[...]
foo(foo1、foo2、foo3);
}
}

但是第一个
bar
调用接收所有参数,而不是只接收
必需的
参数,第二个调用不接收任何参数。我是否遗漏了关于多变量参数的内容?编译器不应该知道
必需的…
Foo1,Foo2
,其余的是
可选的

我认为这很可能是您使用的任何编译器中的错误。我用GCC4.6.3和4.7.2以及Clang3.0和3.3进行了尝试,除了Clang3.0之外,所有这些都产生了预期的输出。

我认为这很可能是您正在使用的任何编译器中的错误。我用gcc 4.6.3和4.7.2以及clang 3.0和3.3进行了尝试,除了clang 3.0之外,所有这些都产生了预期的输出。

您使用的是哪种编译器?我用GCC4.7.2和Clang3.3试过你的代码,它们都产生了预期的输出。通过liveworkspace.org/code/35c5Nh$0试过GCC4.6.3和Clang3.0“>liveworkspace和clang 3.0显示了您正在观察的错误。您使用的是哪种编译器?我用GCC4.7.2和Clang3.3试过你的代码,它们都产生了预期的输出。通过liveworkspace.org/code/35c5Nh$0试过GCC4.6.3和Clang3.0“>liveworkspace和clang 3.0显示了您正在观察的bug。我正在使用Apple LLVM 4.1,很高兴知道这是编译器问题,我会更新,看看是否有帮助。同样感谢您的
sizeof…
,我不知道。LLVM没有4.1版,大概您指的是Xcode 4。1@LukeB. 顺便说一下,Clang3.3是昨晚从trunk编译的。您可能需要搜索他们的bug队列,以确定行为何时得到修复。我希望更新能有所帮助。我正在使用Apple LLVM 4.1,很高兴知道这是一个编译器问题,我会更新,看看是否有帮助。同样感谢您的
sizeof…
,我不知道。LLVM没有4.1版,大概您指的是Xcode 4。1@LukeB. 顺便说一下,Clang3.3是昨晚从trunk编译的。您可能需要搜索他们的bug队列,以确定行为何时得到修复。我希望更新能有所帮助。