template instantiation check for member existing in class объясняет, как проверить, существует ли член класса в шаблоне. Однако, учитывая набор процессов в коммутаторе (NOT), есть способ обращения с чеком-членом. Он должен быть похож на нечто подобное. Обратите внимание, что фактическое определение класса не находится под моим контролем и создается в будущей версии файлов заголовков и библиотек, которые я использую.Элемент класса C++ проверяет, нет ли шаблона
Я знаю, что этот пример препроцессора не сработает, но поскольку это не шаблон, как бы эта обработка была настроена?
case myCase:
{
#ifdef myClass.memberA
myClass.memberA varName;
// other processing using varName
#else
//Alternate processing
#endif
break;
}
Препроцессор не знает о каких-либо конструкциях C++. Канонический способ делать такие вещи - это использование SFINAE. Другими словами: это невозможно сделать с кодом без шаблонов. –
Если вы посмотрите немного, есть много примеров использования [SFINAE] (http://en.wikipedia.org/wiki/Substitution_failure_is_not_an_error), чтобы проверить, существуют ли члены, например [этот старый вопрос] (http: // stackoverflow.com/questions/257288/is-it-possible-to-write-ac-template-to-check-for-a-functions-existence). –
Кстати, почему для кода без шаблонов? – Motti