我想区分空元组和非空元组,我想出了以下解决方案(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<>
的重载?
答案 0 :(得分:3)
你有没有尝试过:
void function(const std::tuple<>& t) { ... }
然后您不需要在第二个函数中单独编写Head
。实例:http://coliru.stacked-crooked.com/a/1806c3a8a3e6b2d1。