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

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Можно ли эмулировать контекст вызова функции-члена для области функтора в динамических библиотеках?

Сообщение Anonymous »

Для простого объекта API:

Код: Выделить всё

// 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»