私はこの種のもののための知って事前に構築されたライブラリは、主にGUI指向です。
ライブラリをどのように使うかというあなたのアイデアを見れば、それはあまりにも貧弱なC++にぴったりのものです。 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 T, class container = std::vector<T> >
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<int> c1("x", fmt1);
Column<int> c2("x^2", fmt2);
table<2> my_table(c1, c2);
私は追加するのではおそらく、その後、およそvector<tuple<values> >
のように振る舞うためにテーブルを設計したい:(特にタイプ)これのほとんどは、あなたのような何かを持っているかもしれないので、テンプレート引数として指定されるだろう唯一の希望
for (int i=0; i<10; i++)
my_table.push_back(make_tuple(i, i*i));
(代わりに、位置の列の名前に基づいて)あなたが使用した方法はおそらく行うことができるが、明白な方法(map<std::string, value>
):値は、次のような何かをしたいですすべての列の型が同じであれば機能します。複数の列タイプをサポートするには、map<std::string, boost::any>
のようなことができますが、妥当であればそれから離れています。
+1ありがとうございます。私はあなたの提案に基づいて何かをコーディングしようと考えています。 –