Это может не обеспечивать «унифицированное представление», типичный подход к обработке нескольких версий - с пространством имен:
namespace my_data
{
namespace v1
{
// v1
struct MyData { … };
}
inline namespace v2
{
// v2
struct MyData { … };
}
}
// To use v2
my_data::MyData data = {};
// or
my_data::v2::MyData data1 = {};
// To use v1
my_data::v1::MyData data2 = {};
По умолчанию вы будете использовать версию структуры, которая находится во встроенном пространстве имен , если вы хотите сослаться на более старую (возможно, устаревшую) версию, вам нужно будет указать ее явно. Затем вы можете перегрузить любую функцию, которая потребляет MyData
, в том же пространстве имен, что и структура, и полагаться на ADL , чтобы найти правильную перегрузку.