我有这个可变的结构,用于确定传入的所有类型的大小之和:

template <typename U, typename... T> struct TotalSizeOf
    : std::integral_constant<size_t, sizeof(U) + TotalSizeOf<T...>::value> {};

template <typename U> struct TotalSizeOf<U>
    : std::integral_constant<size_t, sizeof(U)> {};

用法:TotalSizeOf<double, int, char>::value
问题是,我该如何修改它以使其能够在空参数包上工作,以返回0

例如TotalSizeOf<>::value
目前,我收到错误error: wrong number of template arguments (0, should be at least 1)
我只有C++ 14可用。

最佳答案

您只需要专门处理<>
例子:

template < typename... T> struct TotalSizeOf;

template < typename U, typename... T> struct TotalSizeOf<U, T...>
: std::integral_constant<size_t, sizeof(U) + TotalSizeOf<T...>::value> {};

template <> struct TotalSizeOf<> :
std::integral_constant<size_t, 0 > { };

int main()
{
    std::cout << TotalSizeOf< int, char>::value << std::endl;
    std::cout << TotalSizeOf< char>::value << std::endl;
    std::cout << TotalSizeOf< >::value << std::endl;
}

关于c++ - 如何使我的sizeof sum结构与空参数包一起工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60226192/

10-11 15:51