Вставить дополнительный код в файл

Есть файл tree.cpp. Как сделать так, чтобы другой файл modified_tree.cpp состоял из содержимого этого файла, но с добавленным return выражением в конце функции int* create_tree()?

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

// file modified_tree.cpp

#include "tree.cpp"

INSERT_STRING(create_tree, "return 42") 

// file tree.cpp

// code ... 

int* create_tree() {
    // code ...
    // -> insert return here <-
}

// code ...

Ответы (1 шт):

Автор решения: Cerbo

Если, как вы сказали, файл tree.cpp никак изменять нельзя, то остается только сделать его полный клон за исключением функции которую вам нужно модифицировать. Потом исключить из сборки оригинальный tree.cpp и подменить его своим вариантом. Можно подменить объектный файл на этапе линковки.

Ну а в своей версии можно действовать как вам удобно. Например макросом, если вам нужно несколько вариантов:

// tree_template.cpp
int * create_tree(){
     return SUPER_PUPER_RETURN;
}

// tree_42.cpp
#define SUPER_PUPER_RETURN (42)
#include "tree_template.cpp"

// tree_null.cpp
#define SUPER_PUPER_RETURN (nullptr)
#include "tree_template.cpp"
→ Ссылка