Код: Выделить всё
// api.h
struct Api {
int foo(int c);
int bar(int a, int b);
};
Код: Выделить всё
// api users
struct InApi : Api {
int memfoo() {
return bar(2, foo(5));
}
};
int extfoo(Api * api) {
return api->bar(2, api->foo(5));
}
Код: Выделить всё
// outside of Api class, but as if in
int desiredFormat = [/*capture implicit this context*/](Api *)->{
return bar(2, foo(5)); // no this-> required to resolve
}(api);
И если возможно , возникнут ли какие-либо потенциальные сложности при выполнении этого в двоично-совместимых динамических библиотеках, загружаемых одним и тем же процессом?
Чтобы уточнить: цель состоит в том, чтобы сделать указатель псевдо-this разрешимым неявно. в контексте вызова - без явного указания this-> или api->, в то время как указатель объекта контекста все еще явно передается в точке вызова.
Можно ли создать внешнюю по отношению к объекту вызываемую конструкцию, которая ведет себя как функция-член и может «локально разрешать» члены объекта, как, скажем, расширитель Api — InApi в области своих функций-членов.
Далее уточнение:
рассматриваемое здесь приложение пишет генератор кода для конкретных интроспектируемых объектов, который затем компилируется с заголовками среды выполнения, динамически загружается и используется в среде выполнения в качестве функционального расширения доступных статических объектов среды выполнения. Целью на самом деле является читабельность - ради пользователя я бы хотел избежать беспорядка в self-> для каждого доступа к членам объекта "контекст".
И, говоря еще более кратко, я ищу вызываемый объект с одним или более параметрами, где первый параметр получает эту обработку вызова, становится «объектом локального контекста» и представляет члены указателя объекта как локальные значения внутри контекст вызова.
Подробнее здесь: https://stackoverflow.com/questions/793 ... -scope-acr
Мобильная версия