有时,当数组通过引用传递时,模板函数可以方便地推导出常量数组的大小。
template <unsigned N>
void foo (int (&arg) [N]);
int data [3];
foo (data); // deduces N=3
现在我想对指向数组成员的指针执行此演绎。这应该给你一个想法
struct X
{
int inner_data_1 [3];
int inner_data_2 [4];
};
template <typename T, unsigned N>
void bar (int T ::* (& arg1) [N], int (& arg2) [N])
{
// In the example below:
// arg1 should be a pointer to X::inner_data_X
// arg2[i] should be the value of outer_data_X[i]
// and ultimately I want a pointer to X::inner_data_X[i]
}
int main ()
{
X x;
int outer_data_1 [3];
int outer_data_2 [4];
bar (& X::inner_data_1, outer_data_1);
bar (& X::inner_data_2, outer_data_2);
// This should create a compile error because N is mismatched
//bar (& X::inner_data_1, outer_data_2);
}
我没有正确地表达这一点,我认为bar中arg1的类型是“指向成员T的指针的数组[N]”,但我想要的是“指向数组成员的指针” N] -of-T“
我可以这样做吗?
如果可以,似乎arg1[N]
无效,所以我必须写一些像
T * object;
auto ptr_to_ith_member = & ((object->*arg1)[i]);
最后我想与arg2[i]
关联。
答案 0 :(得分:0)
如果需要指向成员数组的指针,则语法为:
template <typename T, unsigned N>
void bar (int (T::*arg1) [N], int (& arg2) [N])
答案 1 :(得分:0)
符号很简单:
template <typename T, typename S, int Size>
void bar(T (S::*)[Size], T (&)[Size])
{
}
此函数推导出数组元素的类型T
,封闭类型S
以及指向成员数组的指针的Size
。