わかりましたので、疑問があります。これが可能かどうか知りたいです。
一般的なデータ(文字列、整数、ブール値など)を含むデータベースを使用しています。オブジェクトが構築されるか、オブジェクトのメンバーが変更されるたびに、特定のアクション (SELECT または UPDATE) を使用してデータベースにクエリを実行する必要があります。まず第一に、これは DB 関連の質問ではありません。私の本当の問題は、オブジェクトのメンバーへの boost::any のポインタを保持する ptr_vector があることです。次のようなコードで:
class Enemy{
private:
//some private data...
public:
auto_ptr<int> ID_Enemy;
auto_ptr<string> Enemy_Name;
//miscellaneous methods...
};
次に、変更したいメンバーを、引数として boost::any* を取る別のその他のクラスの関数に渡します。
misc_class.addValues((boost::any*)(ID_Enemy.get()));
misc_class.addValues((boost::any*)(Enemy_Name.get()));
その同じクラスは any* を受け入れ、次のことを行います。
auto_ptr<boost::any> val2(val); //being val, the passed any*
Enemy_Values.push_back(val2);
Enemy_Values は ptr_vector です。したがって、Enemy_Values をメンバーとして持つこの misc_class にアクセスするとき、内部の auto_ptr が指している値を変更したいと考えています。
misc_class.Enemy_Values[0] = (boost::any)(69);
ここで、違反エラーが発生します。私は多くのことを試しましたが、auto_ptr のコンテナーを使用したり、boost::any で前後に変換したりするべきではないと誰かに言われました。これは可能ですか、それとももっと直感的な方法がありますか?
前もって感謝します。