gpt4 book ai didi

c++ - 数组成员指针大小的模板推导

转载 作者:太空宇宙 更新时间:2023-11-04 14:03:18 26 4
gpt4 key购买 nike

有时,当数组通过引用传递时,模板函数可以很方便地推断常量数组的大小。

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 的类型是“array[N] of pointer-to-member-of-T”,但我想要的是“pointer to member-of-array[ N]-of-T"

我可以这样做吗?

如果可以的话,arg1[N] 似乎是无效的,所以我必须写类似的东西

T * object;
auto ptr_to_ith_member = & ((object->*arg1)[i]);

这就是我最终想要与 arg2[i] 关联的内容。

最佳答案

符号非常简单:

template <typename T, typename S, int Size>
void bar(T (S::*)[Size], T (&)[Size])
{
}

此函数推导出数组元素的类型T、封闭类型S,以及指向成员数组的指针的Size .

关于c++ - 数组成员指针大小的模板推导,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18197310/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com