1
私は引数としてvector<specific_type>
をとり、vector<boost::variant<specific_type, ...>>
を引数として持つ関数シグネチャを持っています。引数の単純な転送は機能しません。私は唯一の解決策として再梱包を発見しましたが、これはおそらく最も性能の高い解決策ではありません。何とか簡単なキャストは可能ですか?ベクトル<specific_type>をベクトルにキャストする<boost :: variant>
最小例:
#include "boost/variant.hpp"
#include <string>
#include <vector>
typedef boost::variant<int, std::string> test_t;
void inner(std::vector<test_t> a) {}
void outer(std::vector<int> a) {
// the following does not work:
//inner(a);
//inner((std::vector<test_t>) a);
//inner(const_cast<std::vector<test_t>>(a));
//inner(reinterpret_cast<std::vector<test_t>>(a));
//inner(static_cast<std::vector<test_t>>(a));
//inner(dynamic_cast<std::vector<test_t>>(a));
// only "valid" solution
std::vector<test_t> b;
for (const int i : a) {
b.push_back(i);
}
inner(b);
}
int main()
{
std::vector<int> a = { 1, 4, 2 };
outer(a);
}
これは、メモリの余分な割り当てを回避しますが、完全なベクトルも反復しますか?もちろん、構文はかなり良いです。 – gerion
@gerionその周りには道はありません。それぞれの要素に対して 'variant'を構築しなければなりません。実際にはすべての要素を見ずにはできません。 – Barry
@gerion、少なくともオブジェクトをバリアントベクトルに移動できますか? –