我有这个可变的结构,用于确定传入的所有类型的大小之和:
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/