Цель c — Можно ли переопределить поведение селекторов Какао в C ++?

В Каркасе Какао все NSObjectреализовать метод - respondsToSelector: это возвращает логическое значение, указывающее, реализует ли получатель метод или может унаследовать метод, который может ответить на указанное сообщение. Так что, если я хотел проверить, если мой объект foo есть метод - bar:Я бы использовал сообщение [foo respondsToSelector: @selector(bar:)];,

Возможно ли такое поведение в C ++ с идентичным интерфейсом, либо путем реализации селекторов как struct или с помощью std::function объекты как параметры? Например, определение функции будет выглядеть следующим образом:

bool Foo::respondsToSelector(const std::function<?> &selector) {
// Problem: Template arg and return types of this call would always be unknown.
}

bool Foo::respondsToSelector(const Selector *selector) {

}

Objective-C может определять селекторы во время компиляции или во время выполнения в зависимости от того, @selector() или же NSSelectorFromString() используется. Я прошу либо.

2

Решение

Цель C — это система передачи сообщений OO с отражением.

Вы можете реализовать систему OO с передачей сообщений с отражением в C ++, но она не состоит из классов C ++ с методами, которые получают сообщения.

Конечный результат может варьироваться от «механизма сценариев, размещенных на C ++», до шаблонов стилей MFC, moc в стиле Q_OBJECT, до ручного объектного кода q, до некоторых пользовательских динамических библиотечных подключаемых модулей и множества других вариантов.

В языковой рефлексии во время компиляции активно развивается.

2

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

Это возможно с шаблонами. Проверять, выписываться SFINAE а также станд :: enable_if.

0

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