C ++ бібліотека з відкритим вихідним кодом для форматованого виводу таблиці

Чи є бібліотека C ++ з відкритим кодом для форматування таблиці?

Щось, що дозволяє мені писати

Table t;// Table is a class provided by the library
t.column(2);
t.name(0,"x");
t.name(1,"x^2");
t.type("x",Table::Integer);
t.type("x^2",Table::Integer);
t.width("x",1);
t.width("x^2",2);
for( size_t i = 0; i < 10; i++ ) {
 t.set("x",i);
 t.set("x^2",i*i);
}
std::cout << t;

і отримаєте цей текстовий вихід

0  0
1  1
2  4
3  9
4 16
5 25
6 36
7 49
8 64
9 81

Він повинен бути здатний керувати також номерами з плаваючою комою, а не просто цілими числами. Дякую.

2

2 Відповіді

I am not aware of any libraries.
But you can overload the << operator for your class Table and you can achieve the same.

EDIT:
To clarify on your comment of Table being an Library class, It does not affect overloading the << because it is overloaded as an non-member free function.

Приклад коду:

std::ostream& operator<<(std::ostream& os, const Table& obj) 
{ 
 //write obj to stream in whichever way you like
  return os;
} 
2
додано
Таблиця вважається класом, що поставляється з бібліотеки. Я уточню питання.
додано Автор Alessandro Jacopson, джерело
може, я не досить пояснив мою проблему. Я просто маю цифри I і I ^ 2, і бібліотека, яку я шукаю, повинна дати мені такий клас, як Таблиця.
додано Автор Alessandro Jacopson, джерело
@uvts_cvs: << зазвичай перевантажується як функція, що не є членом, так що це не повинно бути проблемою.
додано Автор Alok Save, джерело

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

Дивлячись на ваше уявлення про те, як використовувати бібліотеку, він вражає мене як придатний C ++, але це погано. Пам'ятайте, що C ++ використовує статичний ввід, де ваш t.type ("x", Table :: Integer) має на увазі динамічне набирання тексту (тобто вказати тип цього стовпця під час виконання, а не скласти час)

Особисто я, напевно, думаю, з точки зору об'єкта форматування, який зберігає інформацію для форматування для одного об'єкта. Тоді маєте "стовпець" з об'єктом форматування та вектор пов'язаних даних. Нарешті, у вас є "таблиця" з довільним числом стовпчиків. Більшість цього (особливо типів) буде вказано як аргументи шаблону, тож ви можете мати щось на зразок:

class format { 
    int w, p;
public:
    format(int width = 0, int precision = 0) : w(width), precision(p) {}

    friend std::ostream &operator<<(std::ostream &os, format const &f) { 
        return os << std::setw(f.w) << std::setprecision(f.p);
    }
};

template  >
class Column {
    format f;
    std::string label;
    container data;
public:
    Column(std::string const &l, format const &fmt) : f(fmt), label(l) {}
    void push_back(T const &d) { data.push_back(d); }
};

format fmt1(1);
format fmt2(2);

Column c1("x", fmt1);
Column c2("x^2", fmt2);

table<2> my_table(c1, c2);

I'd probably then design the table to act roughly like a vector >, so to add the values, you'd do something like:

for (int i=0; i<10; i++)
    my_table.push_back(make_tuple(i, i*i));

The method you've used (based on the name of the column instead of the position) could probably be done, but the obvious way (a map) would only work if all the columns had the same type. To support multiple column types, you could do something like map, but I'd stay away from that if at all reasonable.

1
додано
+1 Дякую за вашу відповідь. Я думаю, що я намагатимусь кодувати щось на основі ваших пропозицій.
додано Автор Alessandro Jacopson, джерело
IT KPI C/С++ новым годом
IT KPI C/С++ новым годом
747 учасників

Чат обсуждения С/С++. - Вопросы "напишите за меня лабу" - это оффтоп. - Оффтоп, флуд, оскорбления и вбросы здесь не приняты. - За нарушение - предупреждение или mute на неделю. - За спам и рекламу - ban. Все чаты IT KPI: https://t.me/itkpi/1147