Я подвергаю сомнению свое решение последнего упражнения в Accelerated C++:
Напишите самовоспроизводящуюся программу. Такая программа не выполняет ввод и при запуске записывает копию собственного исходного текста в стандартный поток вывода.
Мое решение:
using std::string;
using std::cout;
using std::endl;
using std::ifstream;
using std::getline;
void selfReproduce16_1()
{
ifstream thisFile("C:\\Users\\Kevin\\Documents\\NetBeansProjects\\Accelerated_C++_Exercises\\Chapter_16.cpp", ifstream::in);
string curLine;
bool foundHeader = false;
while(getline(thisFile, curLine))
{
if(!curLine.compare("void selfReproduce16_1()") || foundHeader)
{
foundHeader = true;
cout << curLine << endl;
}
}
}
Это только распечатывает исходный текст решения (эта функция). Это то решение, которое они имели в виду?
Я хотел бы динамическое решение, которое не требует жесткого кодирования местоположения исходного файла. Однако я не знаю, как автоматически получить местоположение исходного файла во время выполнения.
Еще одним моментом, связанным с этим, является включение «включенных» файлов и (при обнаружении вызова функции) автоматическое получение местоположения исходного файла, в котором хранится функция. Для меня это было бы настоящим «самовоспроизводящимся». "программа.
Возможно ли это в С++? Если да, то как?
ifstream
нарушает правило "Такая программа не использует правило ввода". - person James McNellis   schedule 19.02.2011