Я хотел бы произвести некоторые данные в файл. Например, предположите, что у меня есть два вектора, удваивается:
vector<double> data1(10);
vector<double> data2(10);
есть ли простой способ произвести это в файл так, чтобы первая строка содержала заголовки 'data1' и 'data2', сопровождаемый фактическим содержанием. Функция, которая производит данные, будет передана всевозможные массивы так жесткое кодирование, название заголовка не возможно - идеально я хотел бы преобразовать имя переменной в некоторую строку и затем произвести ту строку, сопровождаемую содержанием векторного массива. Однако я не уверен, как преобразовать имя переменной 'data1' в строку, или действительно если оно может легко быть сделано (от чтения форумов, мое предположение - оно, не может), Если это не возможно, что альтернатива могла бы быть должна использовать ассоциативный контейнер, такой как карта или возможно проще 'парный' контейнер.
pair<vector<double>,string> data1(10,'data1');
Любые предложения приветствовались бы!
Вы можете использовать препроцессор "stringify" #
, чтобы делать то, что вы хотите:
#include <stdio.h>
#define PRINTER(name) printer(#name, (name))
void printer(char *name, int value) {
printf("name: %s\tvalue: %d\n", name, value);
}
int main (int argc, char* argv[]) {
int foo = 0;
int bar = 1;
PRINTER(foo);
PRINTER(bar);
return 0;
}
name: foo value: 0
name: bar value: 1
(Извините за printf
, я никогда не зависал of
. Но этого должно быть достаточно.)
Вы можете использовать препроцессор, там есть токен stringify, но он доступен только из источника, а не для функции (вы бы получили имя аргумента).
Я бы подумал, что очевидный ответ - заставить функцию, которая выполняет вывод, принимать текст заголовка как строковый параметр.