最近写了一个比较复杂的算法,这个算法复杂在哪呢?有很多不同的index,index组成的数组的index,index组成的数组的index组成的数组的index,一眼看过去,虽然通过命名对不同的index做了区分,却还是很难分清楚,到底这个index对应哪个数组。基于这一点,我打算设计一个专属index类,让index静态的和自己所指向的数组静态绑定,大概是这么一个需求:
#include <vector>
template<std::vector<int> *ptr>
struct Index
{
std::size_t i = {0};
int getValue()
{
return (*ptr)[i];
}
};
这段代码当然是可以工作的,但并不符合我的需求,我真正想写的代码应该是这样:
#include <vector>
struct foo
{
std::vector<int> v;
struct Index
{
std::size_t i;
int getValue()
{
return v[i];
}
};
};
显然,这段代码无法通过编译,于是我灵机一动,把他改成了这样:
#include <vector>
struct foo
{
std::vector<int> v = {1, 2, 3};
template<typename T>
struct Index
{
std::size_t i;
int getValue()
{
return v[i];
}
};
Index<void> i;
};
int main()
{
foo f;
//f.i.getValue();
}
这段代码竟然编译通过了,非常神奇。正当我以为我的目的达成时,我又加了一行,也就是下面被注释掉的那一行,好吧,编译报错,这个功能看来短时间内是行不通了。