Linux 使用boost和C++;11
我所拥有的:Linux 使用boost和C++;11,linux,qt,c++11,boost,crash,Linux,Qt,C++11,Boost,Crash,我所拥有的: 我正在为Linux编写Qt应用程序(我在Linx Mint 17.3 64位中工作) 我在我的Qt项目(QtVer5.5)中使用C++11特性 我想添加到我的Qt项目中 libslave使用不推荐的(对于C++11)boost::function、boost::shared\u ptr、boost::bind和boost::any 我的麻烦是: 当我使用gcc(v)编译时,整个项目或只有带有-std=c++11标志boost的库崩溃,并出现许多错误。Qt Creator显示了
- 我正在为Linux编写Qt应用程序(我在Linx Mint 17.3 64位中工作)
- 我在我的Qt项目(QtVer5.5)中使用C++11特性
- 我想添加到我的Qt项目中李>
- libslave使用不推荐的(对于C++11)
、boost::function
、boost::shared\u ptr
和boost::bind
boost::any
我的麻烦是: 当我使用gcc(v)编译时,整个项目或只有带有
-std=c++11
标志boost的库崩溃,并出现许多错误。Qt Creator显示了大约4000个错误,但它们非常相似,看起来像:
typedef boost::function回调;
类型不完整
BOOST_NOEXCEPT'未命名类型
~any()BOOST\u NOEXCEPT
std
库重写库,但是std
不包含boost::any
模拟,所以这是个坏主意
问题: 如何用c++11编译boost(或至少是libslave)
增强版:1.54(来自回购协议) g++版本:4.8.4(来自回购协议) Qt版本:5.5(从官方网站下载) LinuxMint:17.3Rosa
更新: 例如: 你可以下载我试图编译的代码 说明:
libmysqld-dev
,libboost-all-dev
,libmysqlclient-dev
也许你还需要别的东西,但我不记得了。对不起。我找到了黑客,它对我很有用 我用以下字符串将文件nanomysql.h中的
boost::bind
用法替换为std::bind:
...
typedef std::map<std::string, field> value_t;
typedef std::vector< value_t > result_t;
void store(result_t& out)
{
//You need specify template because of push_back has overloads
auto hack = std::bind<void(result_t::*)(const value_t&)>(&result_t::push_back, &out, _1);
use(hack);
}
...
。。。
typedef std::映射值\u t;
typedef std::向量<值>结果;
无效存储(结果输出(&U)
{
//您需要指定模板,因为push_back具有重载
自动hack=std::bind(&result\u t::push\u-back,&out,\u-1);
使用(黑客);
}
...
并将库中所有文件中的所有boost::shared\u ptr
、boost::function
替换为std::shared\u ptr
和std::function
在这之后,所有的东西都可以编译并使用-std=c++11
标志正常工作
nanomysql.h的全部代码可以在这里看到:
使用libslave的实际fork-支持c++11。很抱歉,mysql 5.6和5.7的支持即将推出。第一个错误是“typedef boost::function