Перегрузить троичный оператор?: Или изменить на if{}else{} во включенных файлах
Исследовательский проект здесь. В мою библиотеку C++ я включаю файлы C:
#include "aprogram.c"
который я выполняю символически, перегружая (почти) все операторы.
Я должен быть в состоянии обнаружить (condition) ? this : that
и извлечь condition
, this
а также that
для использования в моей символической библиотеке выполнения. Тем не менее, SO 1, SO 2 и SO 3 среди других уже помогли мне понять, что ?:
не может быть перегружен.
- Есть ли способ для меня, чтобы принудительно перегрузить
?:
в любом случае? - Могу ли я изменить все
?:
операторы из моего включенного C-файла в ifelse-операторы без фактического изменения файла?
2 ответа
В соответствии со стандартом C++ вам не разрешается перегружать?: Лучшее, что вы можете сделать, это использовать макросы C (но это может привести к ужасному коду).
Макросы были добавлены в компилятор C в 1970-х годах, чтобы упростить конструкцию компилятора. Макросы обрабатываются препроцессором C. К сожалению, этот препроцессор наивен и выполняет лишь замену текста. Сгенерированный код часто неоправданно сложен, труден для просмотра (используется опция компиляции –E или –P) и сложен для отладки. В настоящее время вы должны использовать компилятор для обработки всего вашего кода (препроцессор обычно ограничен #include и условной компиляцией).
К сожалению, Бьярн Страуструп решил не позволять вам перегружать?: Ternary - не по какой-либо глубокой технической причине, а потому что это был единственный третичный оператор, и он чувствовал, что усилия по изменению компилятора были неоправданными.