【发布时间】:2015-09-15 18:44:57
【问题描述】:
对于低级应用程序,我在编译时将某种索引定义为类型:
template <int IDX_, class T_>
class Idx{
using TYPE = T_;
static const int IDX = IDX_;
}
当时的用法是:
using region1_field1 = Idx<0, double>;
using region1_field2 = Idx<1, double>;
using region1_field3 = Idx<2, float>;
using region2_field1 = Idx<0, char>;
using region2_field2 = Idx<1, char>;
这个Idx 模板对我来说基本上做得很好,但是你必须手动设置IDX_ 参数很烦人而且有点危险。 有没有办法在编译时自动计数和设置该参数?如您所见,我需要为 region1_* 和 region2_* 提供该计数器的多个实例。
最后,该类用于:
template <class IDX_>
typename IDX_::TYPE getValue(IDX_ idx, int pos){
return (reinterpret_cast<typename IDX_::TYPE*>(data_ptrs[IDX_]))[pos];
}
【问题讨论】:
-
您希望索引成为类型的一部分(现在是因为您将其用作模板参数),还是只希望
IDX成员自动增加? -
第二个参数
T_有什么意义?是否可以将其固定为适当的类型,例如std::size_t? -
@JoachimPileborg:如果它是自动递增的并保持静态和常量就好了。
-
常量
0,1,2和0,1的模式不一致。什么时候增加它,什么时候从零开始?如何决定? -
为什么不
region1_field<2>?
标签: c++ templates c-preprocessor