これまでに質問されたことがありますが、まだ回答を見つけるのに苦労しています。C++で文字列と異なるベクトルデータ型のマップを返す
map
のとvector
のメソッドを返そうとしています。
std::map<std::string, std::vector> FileReader::get_data() {
std::map<std::string, std::vector> content;
std::vector<Eigen::MatrixXd> samples;
std::vector<std::string> sample_names;
for (auto i : list_dir()) {
if (contains_number(i)) {
samples.push_back(load_csv(location + "/" + i));
sample_names.push_back(i);
}
}
content["samples"] = samples;
content["sample_names"] = sample_names;
return content;
}
を明らかに、私はデータ型を持っていないので、私は
error: type/value mismatch at argument 2 in template parameter list for 'template<class _Key, class _Tp, class _Compare, class _Alloc> class std::map'
std::map<std::string, std::vector> get_data(void);
のエラーを取得しています:私はこれは私がこれまでに行ったことある二つのベクトルstd::vector<Eigen::MatrixXd> samples
とstd::vector<std::string> sample_names
を持っていますこの方法ではvector
である。もし私がまたはEigen::MatrixXd
を追加すると、彼らは両方を手にすることができません。私はboost::any
を使うことができると知っていますが、コンパイルする必要のある余分なライブラリ(?)であり、C++は動的に型付けされていません。
余分なライブラリを持たないことでこれを行う方法はありますか?
アップデート-1:
私は私が行うことができると思うもう一つの方法は、コンストラクタでvector<Eigen::MatriXd> samples
& vector<std::string> smaple_names
のプライベート変数を持っているし、2つの同じベクトル型のメソッドget_samples()
とget_sample_names()
を作成し、その後this->samples = samples
のようなものを使用することですthis->sample_name
。これは唯一の他の方法ですか?
更新-2:
C++ 17であるstd::any
ように見えます - http://en.cppreference.com/w/cpp/header/any。 any
1つ:興味がある。
アップデート-3:すべてのマップを使用する理由
If anyone is looking for the answer it's at
は、「私は、余分なライブラリを持っていないことによってこれを行うことができます方法はありますか?」自分で 'std :: any'と書くこともできます。:P私はそれがなくても可能ではないと思います。あなたはデザインを考え直したいかもしれません。 – Rakete1111
@ Rakete1111私の更新が見えますか? – Akshay
@ Rakete1111どうすればいいですか? – Akshay