Создание & quot; ярлыков & quot; макроподобные определения

В моем коде я переписывал static_cast<int *> Около миллиона раз, есть ли способ переопределить ключевое слово, чтобы всякий раз, когда я это называю, оно делало то же самое?

пример

cast будет делать то же самое, что и static_cast<int *>

0

Решение

static_cast имеет преимущество в том, что программисты на C ++ точно распознают, что это такое, не нужно искать #define или другое заявление. Я очень рекомендую вам продолжать использовать static_cast,

Однако я предполагаю, что вашей проблемой является количество требуемых нажатий клавиш, и поэтому наилучшим решением будет использование текстового редактора, который поддерживает макросы. Таким образом, код, который в итоге сохраняется, использует стандартный static_cast<T>(x) синтаксис, но вам может понадобиться только набрать что-то вроде [sс]табуляцияTтабуляцияИкстабуляция.

Информация о том, как это сделать, будет найдена в документации таких редакторов. Я не большой поклонник настраиваемых редакторов, так что подробности за пределами моего понимания.

1

Другие решения

Просить более простой способ сделать что-то опасное …

Да, есть много способов выполнить то, что вы просите, в том числе

  • Шаблон C ++,

  • определение макроса,

  • ярлык редактора,

  • пользовательская предварительная обработка,

  • обученная обезьяна, которая исправляет код.

Но все, что вам нужно сделать, это сделать ваш код еще менее привлекательным.

Вместо этого попытайтесь выяснить, как вы так часто потерять информацию о типе так что вы должны положить его обратно, так сказать.

Общее решение очень простое: не выбросить информацию о типе в первую очередь.

1

Вы имеете в виду, как это?

#define SCAST(T,X) static_cast<T>(X);

Я должен предупредить вас, что, как правило, чрезмерное использование таких определений может сделать ваш код неясным и трудным для понимания.

Что еще более важно вы должны остерегаться макросов, так как они могут привести к трудностям при поиске ошибок, например:

#define SQUARE(X) = X*X;

Ну, если вы называете это с x++препроцессор выполнит буквальную замену, и вы получите (x++)*(x++); Это означает, что это будет не тот ответ, который вы ищете, и что еще хуже, потому что замена происходит за кулисами, вам будет трудно найти причину.

Я бы посоветовал вам вместо этого взглянуть на шаблонные функции или просто встроенные вспомогательные функции, если это возможно, это безопасно и поможет избежать проблемы, на которую я указал.

1
По вопросам рекламы [email protected]