В каких случаях можно использовать __if_exists?

Когда я могу использовать __ if_exists без написания тонны дерьмового кода?

Похоже, это ключевое слово похоже на директиву препроцессора C, но обрабатывается после препроцессора . И IntelliSense не анализирует его и не выделяет код как мертвый или живой. Вместе они делают анализ кода, написанного с использованием __ if_exists , действительно нетривиальным.

Пока что я нашел только один относительно безопасный случай. У нас есть контейнерный класс, который принимает адрес хранимого объекта. Когда сохраненный класс имеет перегруженный оператор & вызывается этот перегруженный оператор, и это вызывает проблемы.

Поэтому я добавил следующую проверку:

__if_exists( T::operator& ) {
   static_assert( false );
}

и теперь код по крайней мере не будет компилироваться, если есть оператор и функция-член является тип хранится.

ИМО, этот вариант использования достаточно ясен и легко читается.

Какие еще есть случаи использования __ if_exists без получения тонны нечитаемого кода?

7
задан sharptooth 21 February 2011 в 14:01
поделиться