我希望能够确定从 0 到给定索引的参数包子集中的字节数。
现在我正在使用非常量的方式来做这件事。下面是我的代码:
template <size_t index, typename... args> struct pack_size_index;
template <size_t index, typename type_t, typename... args>
struct pack_size_index <index, type_t, args...> {
static const size_t index_v = index;
static const size_t value(void) {
if (index_v > 0) {
return sizeof(type_t) + pack_size_index<index - 1, args...>::value();
}
return 0;
}
};
template <size_t index> struct pack_size_index <index> {
static const size_t index_v = index;
static const size_t value(void) { return 0; }
};
用法:
//output: 5 (equal to 1 + 4)
std::cout << pack_size_index<2, bool, float, int, double>::value() << std::endl;
//output: 20 (equal to 8 + 8 + 4)
std::cout << pack_size_index<3, double, double, float, int>::value() << std::endl;
这完成了工作,但这使用了运行时比较,并且每当使用它时,生成的可执行文件的大小会迅速增加。这样做的成本更低的方法是什么?