c++ - 对 C++ 11 可变模板参数进行操作,存储到元组中

标签 c++ c++11 templates variadic

我正在尝试使用可变模板参数学习一些 C++ 11。

我想将浮点输入参数列表传递给 convertTest(),然后返回一个 std::int 元组。我尝试在 g++ 中编译以下内容:

template<typename ...ArgsIn, typename ...ArgsOut>
static inline std::tuple<ArgsOut...> convertTest(float nextArg, ArgsIn... remainingArgs)
{
    auto a = convertTest(remainingArgs...);
    auto b = std::make_tuple(int(nextArg));
    auto c = std::tuple_cat(a, b);

    return c;
}

static inline std::tuple<int> convertTest(float lastArgIn)
{
    return std::make_tuple((int)lastArgIn);
}

int main()
{
    auto res = convertTest(0.5f, 10.11f);
    return 0;
}

我收到以下错误:

 error: conversion from 'std::tuple<int, int>' to non-scalar type 'std::tuple<>' requested

我不确定为什么返回类型 std::tuple<ArgsOut...>将解析为 std::tuple<> .有什么想法吗?

我试过使返回类型为 auto ,但在这种情况下,我收到有关缺少尾随返回类型的投诉。

有什么想法吗?

最佳答案

Argout不可推导,因此成为空列表。 因此,您必须改为按该顺序编写函数

template<typename ... ArgsOut, typename ...ArgsIn>
static std::tuple<ArgsOut...> convertTest(float nextArg, ArgsIn... remainingArgs);

然后调用它

convertTest<int, int>(0.5f, 10.11f);

顺便说一句,你可以简单地写成这样(删除你独占float的事实)

template<typename ...Args>
auto convertTest(Args... args)
-> decltype(std::make_tuple(static_cast<int>(args)...))
{
    return std::make_tuple(static_cast<int>(args)...)
}

关于c++ - 对 C++ 11 可变模板参数进行操作,存储到元组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46165658/

相关文章:

c++ - 这种继承有什么问题?

c++ - 使用 emcc -O2 编译基本代码时崩溃

c++ - 如何制作一个容器来容纳任何类型的指针

C++11 static_assert(以及其中使用的函数)

c++ - 通用回调

c++ - MSVC 2010 是符合 C++11 标准的编译器吗

android - Android 中使用的 C++ 库的最佳架构

c++ - UVA 11959 骰子错误答案

c++ - 具有隐式参数、前向声明、C++ 的模板

AngularJS - 如何制作具有多个部分的 SPA