我有以下代码,用于获取包中所有基本类型的大小(我以特殊方式处理浮点数和双精度浮点数),但当包为空时,我的程序无法编译。
// terminating general case for T being anything else
template <class T>
size_t getSize()
{
return sizeof(T);
}
// terminating special case for T=double
template<>
size_t getSize<double>()
{
return SIZEOF_DOUBLE;
}
// terminating special case for T=float
template<>
size_t getSize<float>()
{
return SIZEOF_FLOAT;
}
// recursive case
template <class T, class U, class ...S>
size_t getSize()
{
return getSize<T>() + getSize<U, S...>();
}
我希望getSize
在这种情况下返回0
:
template <class ...T>
void foo(T... arg)
{
size_t sizeOfTypes = getSize<T...>();
}
当T={}
时,即以foo<>();
的形式调用foo
。
请注意,我不想修改foo
的调用方式,尖括号必须保留。最好是修改getSize
,因为我在除了foo
之外的几个函数中使用它。将foo
修改为最后一步。
std::accumulate
。 - Jarod42accumulate
不是constexpr
。然而,通过仅添加关键字即可使上述内容在C++14中成为constexpr
。 - T.C.