整数と文字列の場合は、C++でboostライブラリ(boost :: variant)を使用してベクトルを定義します。私はそのようなベクトルを埋めるのに苦労しています - 例のコードを投稿すると、ints
とstrings
のベクトルをいっぱいにして、ブーストライブラリを使用してベクトルの要素を読み込むか、intとstring引数を持つベクトルを生成する
SOにはboost::variants
の記事が検索されましたが、探していたものが見つかりませんでした。
整数と文字列の場合は、C++でboostライブラリ(boost :: variant)を使用してベクトルを定義します。私はそのようなベクトルを埋めるのに苦労しています - 例のコードを投稿すると、ints
とstrings
のベクトルをいっぱいにして、ブーストライブラリを使用してベクトルの要素を読み込むか、intとstring引数を持つベクトルを生成する
SOにはboost::variants
の記事が検索されましたが、探していたものが見つかりませんでした。
は、(メモリから書かれた)いくつかの例を示します。
typedef boost::variant<
std::string,
int
> StringOrInt; // using a typedef is just for convenience
StringOrInt myVariant;
myVariant = std::string("hello"); // both of these work
myVariant = 5;
std::vector<StringOrInt> myvec;
myvec.push_back(5);
myvec.push_back(std::string("hello"));
次に読み込むための、2つの方法があります。 1つはboost :: getを使用し、もう1つは訪問者を使用しています。訪問者は通常少し頑強ですが、単純なケースであれば、boost :: getはうまくいく可能性があります。
std::string& mystr = boost::get<std::string>(myvec[0]); // this will throw if the type you requested isn't what's stored
std::string* mystr = boost::get<std::string*>(myvec[0]); // pointer version doesn't throw
おそらく反復しているので、訪問者はおそらくもっとうまくいくでしょう。バリアント内の各タイプのオーバーロードを持つファンクタを作成し、boost::apply_visitor
を使用します。例:
struct MyVisitor {
void operator()(const std::string& arg) const {
std::cout << "It was a string";
}
void operator()(int arg) const {
std::cout << "It was an int";
}
};
MyVisitor myVisitor;
for (auto& val : myvec) {
boost::apply_visitor(myVisitor, val);
}
コンパイルエラーが発生しました:いいえapply_visitorへの呼び出しのためのマッチング関数です。ベクトルの要素に反復処理をして要素にアクセスしようとします。つまり、あなたが投稿したコードの最後の部分を使用する場合です。助言がありますか? – Sid
最後の部分が何をしているか、つまり訪問者の部分を説明することはできますか? – Sid
私はコードを更新しました。 'struct MyVisitor:public boost :: static_visitor <>'を 'struct MyVisitor'だけではなく、' struct MyVisitor:public boost :: static_visitor <> 'にしてください。 – Sid
文字列のベクトルを作成し、数字のある位置で.toString()を使用できます。または、少なくともJavaでは、クラスのすべてのインスタンスが両方のベクトルを持つクラスVectorIntStringを作成できます。あなたがオブジェクトを作成するときに: ますので、コンストラクタがintベクトルと列ベクトルにさえ位置にオッズ位置を追加します。この
VectorIntString vec= new VectorIntString(int a,String a, int b, String b.... ,);
ようなことを行います。ここで
これまでに何を試みましたか?サンプルコード – DimChtz
'boost :: variant、vector > v;'がintとstringの入力でベクトル 'v'を定義しています。しかし、私はそれを埋める方法が不明です。 –
Sid
@DimChtz、私はまた、[チュートリアル](http://www.boost.org/doc/libs/1_55_0/doc/html/variant/tutorial.html)を見てきました – Sid