1

Visual Studio2010sp1を使用しています。Windows7でC++とブースト1.47を使用

私は次のコードを持っています:

typedef boost::variant<unsigned int,int,long,double,bool,string,istringstream,int32_t,
                                 uint32_t,int64_t,uint32_t,sql::SQLString> SQLVariant;

また、istringstreamをistreamに置き換えてみました。次のエラーが発生します:

Error   13  error C2249: 'std::basic_ios<_Elem,_Traits>::operator =' : 
no accessible path to private member declared in virtual base 'std::basic_ios<_Elem,_Traits>'
c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream  860

istringstreamiを宣言した場合; エラーは発生しません。istream i2を宣言すると、同様のエラーが発生します。

私は何が間違っているのですか?

istreamまたは派生クラスが必要な理由は、作業中のSQLライブラリ用です。具体的には、mysqlの実装では、setBlobを呼び出すためにistreamまたはistringstreamが必要です...

文字列を渡し、文字列ストリームを文字列で初期化することで、一時的に回避策を見つけました。ただし、私のバリアントタイプがistreamstreamを使用できるか、さらに良い場合はistreamを使用できると便利です。

ありがとう、フランク

4

1 に答える 1

2

Boost.Variantからの引用:

有界型の要件は次のとおりです。

  • CopyConstructible[20.1.3]。
  • デストラクタは、スローしない例外安全性の保証を支持します。
  • バリアントテンプレートのインスタンス化の時点で完了します。(再帰的なバリアント型を有効にするために不完全な型を受け入れる型ラッパーについては、boost :: recursive_wrapperを参照してください。)

std::istringstreamはコピー構築可能ではありません。

于 2012-07-12T14:20:27.240 に答える