提升变量istringstream和流错误

时间:2012-07-12 14:01:57

标签: c++ visual-studio-2010 boost c++11 boost-variant

我正在使用Visual Studio 2010 sp1。在Windows 7中使用c ++和boost 1.47

我有以下代码:

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

我也尝试用istream替换istringstream。我确实收到以下错误:

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

如果我宣布istringstream i;我没有得到错误。如果我声明istream i2,我会得到类似的错误;

我做错了什么?

我需要istream或派生类的原因,它是我正在处理的sql库。具体来说,对于mysql实现,我需要一个istream或istringstream来调用setBlob ...

我找到了一个临时解决方法,允许传递一个字符串并用字符串初始化stringstream。但是,如果我的变体类型可以采用istreamstream或更好,istream

将会很好

谢谢, 弗兰克

1 个答案:

答案 0 :(得分:2)

引自Boost.Variant:

对有界类型的要求为as follows

  • CopyConstructible [20.1.3]。
  • Destructor坚持无抛出异常安全保证。
  • 在变体模板实例化时完成。 (有关接受不完整类型以启用递归变体类型的类型包装器,请参阅boost :: recursive_wrapper。)

std :: istringstream不是可复制构建的。