(这个问题有一个Nim的答案,提到了boost :: mpl :: map.)
标准C++中是否有可以保存类型的编译时容器?
一个用法示例是:
compiler::vector foo{char, short, long, long long};
template <int N>
void bar(foo[N] param){/*do something and return foo[N]*/}
Run Code Online (Sandbox Code Playgroud)
这个构建基于B\xc3\xa9renger的答案,这让我进入了tuple概念。但我相信我们可以做得更好,甚至保留参考文献:
tuple foo<char&, short&, long&, long long&>;\n\ntemplate <int N>\nvoid bar(tuple_element_t<N, decltype(foo)> param){}\nRun Code Online (Sandbox Code Playgroud)\n\n事实上如果没有计划使用foo此函数之外的内容,我们甚至可以将其声明为内联:
template <int N>\nvoid bar(tuple_element_t<N, tuple<char&, short&, long&, long long&>> param){}\nRun Code Online (Sandbox Code Playgroud)\n