如何定义模板函数重载以匹配空std :: tuple<>?

时间:2017-09-21 02:54:16

标签: c++ templates c++14

我想区分空元组和非空元组,我想出了以下解决方案(example):

#include <tuple>
#include <iostream>

template <typename ... Args>
void function(const std::tuple<Args...>& t)
{
    std::cout << "empty tuple" << std::endl;
}

template <typename Head, typename ... Args>
void function(const std::tuple<Head, Args...>& t)
{
    std::cout << "tuple of size: " << sizeof...(Args) + 1 << std::endl;
}

int main()
{
    function(std::make_tuple());  // picks 1st function
    function(std::make_tuple(1)); // picks 2nd function
    function(std::make_tuple(1, 2, 3, '4')); // picks 2nd function
}

但是,使用可变参数Args来匹配std::tuple<>会误导读者,我认为在第二次重载中引入Head是过分的。有没有一种简单的方法来编写直接匹配std::tuple<>的重载?

1 个答案:

答案 0 :(得分:3)

你有没有尝试过:

void function(const std::tuple<>& t) { ... }

然后您不需要在第二个函数中单独编写Head。实例:http://coliru.stacked-crooked.com/a/1806c3a8a3e6b2d1