В Каркасе Какао все 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()
используется. Я прошу либо.
Цель C — это система передачи сообщений OO с отражением.
Вы можете реализовать систему OO с передачей сообщений с отражением в C ++, но она не состоит из классов C ++ с методами, которые получают сообщения.
Конечный результат может варьироваться от «механизма сценариев, размещенных на C ++», до шаблонов стилей MFC, moc в стиле Q_OBJECT, до ручного объектного кода q, до некоторых пользовательских динамических библиотечных подключаемых модулей и множества других вариантов.
В языковой рефлексии во время компиляции активно развивается.
Это возможно с шаблонами. Проверять, выписываться SFINAE а также станд :: enable_if.