在可变参数模板中使用括号括起始化器列表? [英] Use brace-enclosed initializer lists in a variadic template?

查看:146
本文介绍了在可变参数模板中使用括号括起始化器列表?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在可变模板函数中使用括号括起来的初始化列表,但是编译器抱怨...我要求太多或者做错了什么?

I'm trying to use brace-enclosed initializer lists in a variadic template function, but the compiler complains... am I asking too much or did I do something wrong?

这最好通过示例演示:

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)
}

GCC(4.7)说:

GCC (4.7) says:

main.cpp:45:14: error: no matching function for call to ‘Test::Test(int, <brace-enclosed initializer list>)’


推荐答案

一个括号初始值列表不能转发,所以你很不幸运。

A brace enclosed initializer list cannot be forwarded, so you are unfortunately out of luck.

这篇关于在可变参数模板中使用括号括起始化器列表?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆