如何编写一个返回可变参数模板的函数?这是正确的事吗?

时间:2016-02-04 07:46:18

标签: c++ c++11

template <typename... Args>
Args... func3()   // error here -> Syntactical failure at Args...
{
    return (1,2,3,4,5,6);
}

struct sample
{
    template <typename... Args>
    sample(Args... args) {}
};

sample s(func3());

运行这段代码后出现编译错误。这可以解决吗?如果没有,我怎么能重写?

2 个答案:

答案 0 :(得分:4)

我不知道你真正想要实现的目标,但看起来你想要返回一个可能不同类型的值的元组。有std::tuple代表这一点:

auto func3()
{
    return std::make_tuple(1,2,3,4,5,6);
}

struct sample
{
    template <typename... Args>
    sample(std::tuple<Args...>  args) {}
};

sample s(func3());

答案 1 :(得分:1)

您需要提供更多信息,但在某些情况下请查看initializer_list

#include <initializer_list>

std::initializer_list<int> foo() {
    return {1,2,3,4,5};
}

如果你需要某种类型的独立性,你可以实现一些Variants结构,如:QVariantboost.Anyboost.Variant

但要注意initializer_list的生命周期。