Как отправить или сохранить функцию, а также восстановить или восстановить функцию и выполнить ее в C ++? - PullRequest
3 голосов
/ 31 августа 2011

Есть ли способ отправить или сохранить функцию в виде файла? Я хочу сделать это в C ++ на платформе Windows.

Я предполагаю, что между читателем и отправителем или хранителем существует некое соглашение

Это нормально, если я отправлю как ниже? сторона сервера:

label1:
int func1(int somevar){
    int a = 1;
    return somevar+a;
}
label2:

send(sockfd, label2-label1, sizeof(int), 0) //send a size first
send(sockfd, label1, label2-label1, 0); // send a "function" 

спасибо заранее!

Ответы [ 6 ]

2 голосов
/ 31 августа 2011

C ++ - это статический язык - вы не можете изменять исполняемый файл, который вы запускаете, и добавлять новые функции. Такие языки, как Ruby, позволят вам сделать это, но это не является функцией C ++.

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

Я бы сказал, редизайн, так что тебе это не нужно.

2 голосов
/ 31 августа 2011

С C ++ это определенно невозможно.

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

2 голосов
/ 31 августа 2011

Нет, в C ++ нет способа сделать это. Языки, которые могут разрешить передачу исполняемого кода, включают Erlang, Ruby, TCL.

Chris

2 голосов
/ 31 августа 2011

Уже существует механизм для этого в Windows для C ++. Ваши функции «сохраняются» при компиляции в dll. Затем вы можете «извлечь» свои функции из dll, используя GetProcAddress().

1 голос
/ 31 августа 2011

ВЫ МОЖЕТЕ СДЕЛАТЬ ЭТО!Просто напишите свой собственный компилятор, который вместо компиляции файлов ожидает сигналов, создает файлы, а затем компилирует их.И затем, возможно, запускает их.

В основном:

  1. отправить текст функции
  2. получить текст функции
  3. скомпилировать с вашей программой текст
  4. выполнить скомпилированный код
  5. ???
  6. прибыль!
0 голосов
/ 31 августа 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...