В настоящее время я делаю этот трюк, чтобы иметь cstring на основе типа:
template<class ListT> static char constexpr * GetNameOfList(void)
{
return
std::conditional<
std::is_same<ListT, LicencesList>::value, "licences",
std::conditional<
std::is_same<ListT, BundlesList>::value, "bundles",
std::conditional<
std::is_same<ListT, ProductsList>::value, "products",
std::conditional<
std::is_same<ListT, UsersList>::value, "users",
nullptr
>
>
>
>;
}
Но этот код не очень красивый, и если мы хотим проверить больше типов, это может быть нечитаемым. Это способ сделать то же самое, что если бы был блок блокировки коммутатора?
На самом деле код сложнее, потому что std:: условный нужен какой-то тип, поэтому нам нужен какой-то класс, чтобы сделать трюк:
struct LicenceName { static char constexpr * value = "licences"; };
например.