Возможно ли иметь шаблонную функцию C ++, которая может обращаться к различным полям во входных данных в зависимости от того, какой тип входных данных был передан ей?
например. У меня есть код формы:
typedef struct
{
int a;
int b;
}s1;
typedef struct
{
int a;
}s2;
template <class VTI_type> void myfunc(VTI_type VRI_data, bool contains_b)
{
printf("%d", VRI_data.a);
if(contains_b) // or suggest your own test here
printf("%d", VRI_data.b); // this line won't compile if VTI_type is s2, even though s2.b is never accessed
}
void main()
{
s1 data1;
data1.a = 1;
data1.b = 2;
myfunc <s1> (data1, true);
s2 data2;
data2.a = 1;
myfunc <s2> (data2, false);
}
Итак, мы хотим использовать поле A из множества различных типов данных, и это прекрасно работает.
Однако у некоторых данных также есть поле B, которое необходимо использовать, но код, который обращается к полю B, необходимо удалить, если шаблон знает, что он просматривает тип данных, который не содержит поле B.
(в моем примере структуры являются частью внешнего API, поэтому не могут быть изменены)