Обнуляемый тип в ATL COM

Я работаю над доступом к данным в C ++ ATL / COM. Как передать в интерфейс тип, допускающий значение NULL (например, целое число, допускающее значение NULL) ???


person Telemat    schedule 03.07.2012    source источник
comment
Похоже, нам нужно использовать variant_t (stackoverflow.com/questions/1987261/) ... Другими словами, моя сущность будет полна вариантов ... что может быть неприятно. Есть ли лучшее решение?   -  person Telemat    schedule 03.07.2012


Ответы (1)


В ATL / C ++ в интерфейсах (IDL) у вас нет классов, допускающих значение NULL, и поддержки языковых конструкций (<type>? в C #). Nullable - это, по сути, сам тип и дополнительный BOOL, указывающий, есть ли у нас в настоящее время NULL или нет.

Можно реализовать относительно простой шаблонный класс для просмотра - с целью расширения - аналогично C # Nullable. В интерфейсе это будут либо два аргумента, либо, как вы обнаружили, вы можете использовать тип VARIANT, поскольку он уже включает значение полезной нагрузки и член .vt, указывающий тип. VT_NULL константа - это то, что он говорит для itslef - значение всего варианта равно нулю.

person Roman R.    schedule 06.07.2012
comment
Я обращаюсь к базе данных в компоненте, и поэтому я считаю, что использование варианта, вероятно, является лучшим вариантом (поскольку сам ADO использует его). - person Telemat; 03.08.2012