pre*_*eys 1 c++ templates function variadic-templates c++14
我有一个功能
template <typename T, typename... Args> void foo(const T&, Args...);
Run Code Online (Sandbox Code Playgroud)
我希望传递类似的东西:
foo(vector, 0,1,2,3,..., vector.size() - 1);
Run Code Online (Sandbox Code Playgroud)
哪里vector是某种矢量.我不能使用std::make_index_sequence因为vector.size()不是编译时常量.以上结构是否可行(例如使用std::iota辅助函数),而不进行从0到无穷大的线性搜索,对于什么vector.size()等于?
不.嗯,你可以做二进制搜索或查找表,但这仍然会产生O(max size_t ^ 2)代码.
很少有系统允许生成大量代码并且不会造成可怕的死亡:在64位计算机上,我们仅在函数名称长度上以10 ^ 37的顺序进行讨论.如果您将当前行星地球的副本放在整个可见宇宙中的每颗恒星周围并使用地球计算机存储中的每一个来存储您的功能名称列表,那么存储所有这些功能名称是切实可行的.
在能够做到这一点之前你可能会遇到编译器限制,但我还没有尝试过icpc.
如果您选择较小的限制(例如,1000),您可以更实际地做到这一点.使用相对较小的上限,我称之为魔术开关(将运行时值调度为编译时常量)解决了这个问题.
不过,问题在于您的计划.