我正在尝试在可变参数模板函数中使用大括号括起来的初始化程序列表,但编译器提示……我问得太多还是做错了什么?

最好通过示例演示:

struct Bracy
{
    Bracy(int i, int j)
    {
    }
};

struct Test
{

    void consumeOne(int i)
    {
    }

    void consumeOne(const Bracy & bracy)
    {
    }

    void consume()
    {
    }

    template<typename T, typename ...Values>
    void consume(const T & first, Values... rest)
    {
        consumeOne(first);
        consume(rest...);
    }

    template<typename ...Values>
    Test(Values... values)
    {
        consume(values...);
    }
};

void testVariadics()
{
    Test(7,{1,2}); //I'd like {1,2} to be passed to consumeOne(const Bracy & bracy)
}

海湾合作委员会(4.7)说:
main.cpp:45:14: error: no matching function for call to ‘Test::Test(int, <brace-enclosed initializer list>)’

最佳答案

大括号括起来的初始化程序列表无法转发,因此很遗憾,您很不走运。

关于c++ - 在可变参数模板中使用大括号括起来的初始化程序列表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11921335/

10-14 09:27