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

Popular posts from this blog

ios - UICollectionView Self Sizing Cells with Auto Layout -

node.js - ldapjs - write after end error -

DOM Manipulation in Wordpress (and elsewhere) using php -