C++中的initializer_list获取列表长度并用于模板参数的编译期计算小示例
-
用 std::array的initializer_list + 一键计算字节的模板来演示用于模板参数的可能
#include <iostream> #include <array> template <typename T, int SZ> struct Byte { static constexpr int size = sizeof(T) * SZ; }; int main() { constexpr std::array<int, 4> arr {1, 2, 3, 4}; std::cout << Byte<int, arr.size()>::size << std::endl; return 0; }
想法来自该视频评论区的讨论: https://www.bilibili.com/video/BV1vKuQzkEo2
-
S sunrisepeak 从 中的 General Discussion | 综合讨论 移动了该主题
-
-
@月仁不吃五饼 在 C++中的initializer_list获取列表长度并用于模板参数的编译期计算小示例 中说:
我觉得应该写template<typename T,size_t t>好一点,如果这个数组非常大,那被转换到int有符号数可能溢出
这里用size_t 更规范一点, 在意图上长度也是>=0. 当时就为了简单能表达就用了int
-
看错误了 补 gcc 11

-
clang最小可编译的版本和标准是clang3.4.1+cpp11:

-
@FrozenLemonTee 在 C++中的initializer_list获取列表长度并用于模板参数的编译期计算小示例 中说:
clang最小可编译的版本和标准是clang3.4.1+cpp11:

这样
