c++ - Template deduction of pointer-to-array-member's size -
sometimes convenient template function deduce size of constant array when array passed reference.
template <unsigned n> void foo (int (&arg) [n]); int data [3]; foo (data); // deduces n=3
now want perform deduction on pointer array member. should give idea
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 example below: // arg1 should pointer x::inner_data_x // arg2[i] should value of outer_data_x[i] // , want pointer 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); // should create compile error because n mismatched //bar (& x::inner_data_1, outer_data_2); }
i'm not expressing correctly, think type of arg1 in bar "array[n] of pointer-to-member-of-t" want "pointer member-of-array[n]-of-t"
can this?
if can, seems arg1[n]
wouldn't valid i'd have write like
t * object; auto ptr_to_ith_member = & ((object->*arg1)[i]);
which want correlate arg2[i]
in end.
the notation rather straight forward:
template <typename t, typename s, int size> void bar(t (s::*)[size], t (&)[size]) { }
this function deduces type t
of array elements, enclosing type s
, , size
of pointer member array.
Comments
Post a Comment