Преобразование строки в коде C ++ - PullRequest
0 голосов
/ 02 августа 2009

Я изучаю C ++ и разрабатываю проект на практике, но теперь я хочу превратить переменную (String) в код, например, у пользователя есть файл, содержащий код C ++, но я хочу, чтобы моя программа читала это файл и вставьте его в код, например:

#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
using namespace std;
int main( int argc, char* argv[] )
{
    ifstream file(argv[ 1 ]);
    if (!file.good()) {
       cout << "File " << argv[1] << " does not exist.\n";
      return 0;
    }
    string linha;
    while (!file.eof())
    {
    getline(file, linha);
    if (linha.find("code") != string::npos)
       {
          size_t idx = linha.find("\""); //find the first quote on the line
          while ( idx != string::npos ) {
             size_t idx_end = linha.find("\"",idx+1); //end of quote
             string quotes;
             quotes.assign(linha,idx,idx_end-idx+1);
             // do not print the start and end " strings
             cout << quotes.substr(1,quotes.length()-2) << endl;
             //check for another quote on the same line
             idx = linha.find("\"",idx_end+1);
             } 
       }
    }
  return 0;
}

А вот файл exmaple:

code "time_t seconds;\n seconds = time (NULL);\n cout << seconds/3600;"

Но когда я запускаю программу, она не преобразует строку в код, а печатает именно то, что находится в кавычках.

Спасибо!

Ответы [ 6 ]

5 голосов
/ 02 августа 2009

C ++ - это скомпилированный язык, а не интерпретируемый язык.

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

3 голосов
/ 02 августа 2009

Ты правильно делаешь кут? Очевидно, это отображается.

Возможно, вы пытаетесь внедрить код в работающий процесс, подобный этому http://www.codeproject.com/KB/DLL/code_injection.aspx

1 голос
/ 02 августа 2009

Вы не можете делать то, что вы хотите в C ++. Чтобы оценить аргументы командной строки, вам нужно встроить язык сценариев в вашу программу (Python может показаться хорошим примером - это не сложно). Строковый аргумент может быть оценен как код Python.

1 голос
/ 02 августа 2009

То, что вы хотите, это на самом деле оценить строку во время выполнения. Это не поддерживается напрямую в C ++ или других неинтерпретируемых / сопряженных языках.

0 голосов
/ 02 августа 2009

Как и другие отмечали, что с ++, как правило, является скомпилированным языком, и просто не предоставляет никакой встроенной поддержки для этого.

Два возможных решения вопроса, как вы его задаете:

  • Найдите и используйте интерпретатор c ++. Есть несколько вопросов StackOverflow по этому вопросу, и существует как минимум два таких компонента программного обеспечения. Я предпочитаю cint .
  • Вызовите компилятор c ++ для кода, чтобы сгенерировать динамическую библиотеку, которую вы впоследствии загружаете и вызываете. Это будет не совсем так, как в вашем примере, но случай, когда пользователь должен предоставить «вызываемый» код (то есть одну или несколько функций).

Возможное решение вопроса, который вы, возможно, имели в виду:

  • Используйте язык расширения, такой как python, tcl или lua.
0 голосов
/ 02 августа 2009

Если цель состоит в том, чтобы выполнить какой-либо предоставленный извне сценарий, я бы предложил, чтобы этот сценарий был указан в качестве одного из наиболее часто используемых языков сценариев. Мы сделали это с Perl много лет назад. Этот текст ссылки описывает как.

Хотя технически возможно динамически компилировать и связывать код C ++, это довольно сложно, и результат может быть не слишком надежным - подумайте, насколько ловко может оказаться, что автор «сценария» неправильно использует указатель и удаляет что-то важное.

Языки сценариев, как правило, более податливы, чем С ++, для менее технических авторов

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