作者:手机用户2502904917 | 来源:互联网 | 2022-12-06 18:49
是否可以使用以下用法constexpr
计算std::tuple
元素类型的大小总和的函数:
static_assert(sum_size(std::tuple) == 5, "not 5!");
?
这不直接回答我的问题,因为DoSomething不是constexpr功能.我需要在编译时调用DoSomething.或者也许有人能解释如何使用boost::fusion::for_each
与static_assert()
?
1> max66..:
是否可以使用constexpr函数计算元组元素类型的大小总和,具有以下用法:
为什么不.
不幸的是,你已经标记了C++ 14.
在C++ 17中更简单(感谢模板折叠)
template
constexpr std::size_t sum_size (std::tuple const &)
{ return ( sizeof(Ts) + ... ); }
在C++ 14中,您可以编写.
template
constexpr std::size_t sum_size (std::tuple const &)
{
using unused = std::size_t[];
std::size_t ret {};
(void)unused { 0u, ret += sizeof(Ts)... };
return ret;
}
前C++ 14(C++ 11)你必须使用递归,这是一个可能的解决方案
template
constexpr std::size_t sum_helper ()
{ return 0u; }
template
constexpr std::size_t sum_helper ()
{ return I0 + sum_helper(); }
template
constexpr std::size_t sum_size (std::tuple const &)
{ return sum_helper(); }
但你必须纠正用法
// .........................................VV
static_assert(sum_size(std::tuple{}) == 5, "not 5!");