我在实现递归模板(模板结构中的函数)时遇到问题,它将被 std::tuple_size 终止。
这是代码片段(我简化了代码,以强调问题):
template<int index, typename ...T_arguments>
struct Helper
{
static void func (size_t& return_size,
const std::tuple<T_arguments...>& arguments)
{
const auto& argument (std::get<index> (arguments));
return_size += ::value_size (argument);
::Helper<index + 1, T_arguments...>::func (return_size, arguments);
}
// ...
template<typename... T_arguments>
struct Helper<std::tuple_size<T_arguments...>::value, T_arguments...>
{
static void func (size_t& return_size,
const std::tuple<T_arguments...>& arguments)
{
const auto& argument (std::get<std::tuple_size<T_arguments...>::value> (arguments));
return_size += ::value_size (argument);
}
初始模板调用如下所示:
Helper<0, T_arguments...>::func (return_size, arguments);
GCC 失败并出现错误:
错误:模板参数 'std::tuple_size::value' 涉及模板参数 struct Helper::value, T_arguments...>
std::tuple_size
号称在编译时就知道了,那为什么我不能用模板特化呢?