テーブルの書式付き出力用の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,

この種のことについて私が知っている既成のライブラリはほとんどがGUI指向であるため、データは単にテキストではなくスプレッドシートのようなセルに表示されます。

ライブラリをどのように使用するかというあなたの考えを見れば、それはあまりにもうまくいきません。 t.type( "x"、Table :: Integer)はダイナミックな型定義を意味する静的な型定義を使用することに注意してください(つまり、実行時にその型を指定するのではなくコンパイル時間)。

個人的には、 1つオブジェクトの書式設定情報を格納している書式設定オブジェクトの観点から考えるとよいでしょう。次に、書式設定オブジェクトと関連付けられたデータのベクトルを含む「列」を作成します。最後に、任意の数の列を持つ「表」を作成します。これらのほとんど(特に型)はテンプレート引数として指定されるので、次のようなものがあります:

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,