«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > ## Можете ли вы получить указатели на функции для встроенных операторов C++?

## Можете ли вы получить указатели на функции для встроенных операторов C++?

Опубликовано 8 ноября 2024 г.
Просматривать:521

## Can You Get Function Pointers for Built-in C   Operators?

Можно ли получить указатель на функцию встроенного стандартного оператора?

Введение

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

Почему указатели на функции недоступны для встроенных операторов

Согласно стандарту C (13.6/ 1), встроенные операторы не являются обычными операторными функциями и, следовательно, не могут иметь указателей на функции. Они участвуют исключительно в разрешении перегрузки и не служат какой-либо другой цели.

Альтернатива: использование функциональных объектов

Чтобы преодолеть это ограничение, стандарт C вводит функциональные объекты, которые обеспечивают функциональность, аналогичную встроенным функциям. операторы через шаблонные объекты. Например, для сравнения определяются такие функциональные объекты, как «equal_to», «greater» и «less_equal». Эти объекты можно использовать в качестве аргументов указателя функции.

Пример

В представленном фрагменте кода целью является сравнение двух целых чисел в классе шаблона. Используя технику объектов-функций, этого можно добиться следующим образом:

class MyAction {
  bool operator()() {
    if (fnCompare_(arg0_, arg1_)) {
      // do this
    } else {
      // do s.th. else
    }
  }
};

Здесь fnCompare_ может быть объектом функции, например std::equal_to, для выполнения сравнения.

Операторы стандартного типа класса

В дополнение к объектам функции операторы стандартной библиотеки также могут использоваться в качестве указателей на функции. Однако необходимо указать соответствующий экземпляр шаблона. Например:

std::basic_string a("test"), b("test2");
std::cout >(a, b, &std::operator );

Заключение

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

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3