标签: boost

混合Qt和Boost

我正在寻找使用Qt 4框架在C++中启动项目(需要跨平台的GUI).我从朋友和网上听过Boost图书馆的好消息.我已经开始阅读这两篇文章,并且在我太深入之前想问一个粗略的问题:这两个开发"系统"是否相互排斥?

我最初的搜索和阅读显示了信号处理,自定义构建系统和其他低级原语的一些重叠.

在同一个项目中使用它们是否有意义?

c++ qt boost

66
推荐指数
4
解决办法
2万
查看次数

使用属性树在Boost中创建JSON数组

我正在尝试使用boost属性树创建一个JSON数组.

文件说:"JSON数组被映射到节点的每个元素与空名称的子节点."

所以我想创建一个空名称的属性树,然后调用write_json(...)以获取数组.但是,文档没有告诉我如何创建未命名的子节点.我试过了ptree.add_child("", value),但这会产生:

Assertion `!p.empty() && "Empty path not allowed for put_child."' failed
Run Code Online (Sandbox Code Playgroud)

文档似乎没有解决这一点,至少不能以任何方式解决.有人可以帮忙吗?

c++ json boost boost-propertytree

66
推荐指数
4
解决办法
6万
查看次数

我应该从使用boost :: shared_ptr切换到std :: shared_ptr吗?

我想在GCC中启用对C++ 0x的支持-std=c++0x.我并不一定需要GCC 4.5中的任何当前支持的C++ 11功能(很快就会有4.6),但我想开始习惯它们.例如,在我使用迭代器的一些地方,auto类型会很有用.

但同样,我不需要任何当前支持的功能.这里的目标是鼓励我将新标准的特征融入我的编程"词汇"中.

根据您对C++ 11支持的了解,在GCC中启用它是一个好主意,然后通过例如从使用切换boost::shared_ptrstd::shared_ptr专用来实现它,因为两者不混合?

PS:我知道这个比较不同口味的好问题,shared_ptr但是我要求在标准最终确定之前提出更高级别的建议.另一种说法是,当像GCC这样的编译器说它支持"实验性功能"时,这是否意味着我可能会在编译过程中遇到奇怪的错误,这些错误将成为主要的时间汇,并且是StackOverflow上一个神秘问题的来源?

编辑:我决定退回,std::shared_ptr因为我只是不相信它在GCC 4.5中的支持,如本问题中的示例所示.

c++ boost stl shared-ptr c++11

66
推荐指数
4
解决办法
3万
查看次数

C++ 11 std :: bind和boost :: bind之间的区别

这两者有什么区别吗?还是我的安全,以取代所有出现boost::bindstd::bind在我的代码,从而消除对加速的依赖?

c++ boost boost-bind stdbind c++11

66
推荐指数
4
解决办法
2万
查看次数

使用boost序列化和反序列化json

我是新手std::Map.什么是boost使用类型序列化和反序列化数据的最简单方法PropertyTree.我发现了一些使用的例子,std::Map但对我来说它们很模糊.

c++ json boost boost-propertytree

66
推荐指数
2
解决办法
6万
查看次数

boost :: noncopyable有什么优点

为了防止复制类,您可以非常轻松地声明私有复制构造函数/赋值运算符.但你也可以继承boost::noncopyable.

在这种情况下使用boost有什么优点/缺点?

c++ boost noncopyable

64
推荐指数
7
解决办法
3万
查看次数

为什么不能用c ++ 0x模式中的libc ++来链接这个boost :: program_options示例?

编译boost :: program_options的示例代码:http://svn.boost.org/svn/boost/trunk/libs/program_options/example/first.cpp

...在MacOS Lion(10.7.2)上,使用随MacPorts安装的boost-1.48.0:

$ clang++ -v
Apple clang version 3.0 (tags/Apple/clang-211.12) (based on LLVM 3.0svn)
Target: x86_64-apple-darwin11.2.0
Thread model: posix
$ clang++ -std=c++0x --stdlib=libc++ -lc++ -I/opt/local/include -L/opt/local/lib -lboost_program_options first.cpp -o first
Undefined symbols for architecture x86_64:
  "boost::program_options::options_description::options_description(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned int, unsigned int)", referenced from:
      _main in cc-6QQcwm.o
  "boost::program_options::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, boost::program_options::options_description const&)", referenced from:
      _main in cc-6QQcwm.o
  "boost::program_options::abstract_variables_map::operator[](std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const", referenced from:
      boost::program_options::variables_map::operator[](std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const in …
Run Code Online (Sandbox Code Playgroud)

c++ boost clang c++11 libc++

64
推荐指数
1
解决办法
2万
查看次数

如何使用clang ++/libc ++编译/链接Boost?

这个问题的答案为什么不能用c ++ 0x模式中的libc ++来扼制这个boost :: program_options例子?陈述"你需要使用clang ++ -stdlib = libc ++重建boost."

我正在使用带有clang v3.0的MacOS Lion.如何使用clang构建Boost v1.48.0并将其与libc ++链接?

更新:我已经创建了一个user-config.jam文件,其中包含以下内容:

using clang-darwin
Run Code Online (Sandbox Code Playgroud)

...将使用clang而不是gcc构建Boost.如何链接libc ++而不是libstdc ++?

c++ boost clang libc++

63
推荐指数
2
解决办法
4万
查看次数

为什么std :: function不相等?

这个问题也适用于boost::functionstd::tr1::function.

std::function 不相等的平等:

#include <functional>
void foo() { }

int main() {
    std::function<void()> f(foo), g(foo);
    bool are_equal(f == g); // Error:  f and g are not equality comparable
}
Run Code Online (Sandbox Code Playgroud)

在C++ 11中,operator==operator!=重载并不存在.在早期的C++ 11草案中,使用注释(N3092§20.8.14.2)将重载声明为已删除:

// deleted overloads close possible hole in the type system
Run Code Online (Sandbox Code Playgroud)

它没有说明"类型系统中可能存在的漏洞"是什么.在TR1和Boost中,声明了重载但未定义.TR1规范评论(N1836§3.7.2.6):

这些成员函数应保持未定义.

[ 注意:类似布尔值的转换会打开一个漏洞,通过==或可以比较两个函数实例!=.这些未定义的void运算符会关闭漏洞并确保编译时错误.- 尾注 ]

我对"漏洞"的理解是,如果我们有bool转换函数,那么转换可以用于相等比较(以及其他情况):

struct S {
    operator bool() { return false; }
};

int main() { …
Run Code Online (Sandbox Code Playgroud)

c++ boost function tr1 c++11

61
推荐指数
4
解决办法
1万
查看次数

Boost如何用于实现C++ 14风格的自动返回类型?

假设我有一个将两个值相加的函数.如果我对类型一无所知,那么我基本上必须写两次函数; 一次在实际返回值中,再次作为返回类型说明符:

template <typename A, typename B>
auto Add(const A& a, const B& b) ->std::decay<decltype(a + b)>::type
{
  return a + b;
}
Run Code Online (Sandbox Code Playgroud)

虽然这有效,但它是不可取的,因为它难以阅读且难以维护.

在C++ 14中,这不会是一个问题,因为我们可以删除返回类型说明符(我不确定它会不会衰减...).现在,我坚持使用C++ 11.

根据我的经验,无论何时我在C++中寻找尚未进入标准的功能,但有明显的需求,Boost库通常都有一个解决方案.我搜索了文档,但是我找不到任何可能对我有帮助的东西.这些BOOST_AUTO_RETURNBOOST_TYPEOF_TPL功能似乎更多旨在为C++ 03用户提供C++ 11功能.

基本上我所追求的是执行以下功能的东西:

template <typename A, typename B>
auto Add(const A& a, const B& b)
{
  return a + b; // Deduce return type from this, like C++14 would
}
Run Code Online (Sandbox Code Playgroud)

Boost库中是否有一些我不知道的功能(或C++ 11中的一个漂亮的技巧)可能允许我-> decltype(...)在每次自动返回类型后放弃显式?这将如何实施?

c++ boost c++11

61
推荐指数
2
解决办法
2015
查看次数

标签 统计

boost ×10

c++ ×10

c++11 ×5

boost-propertytree ×2

clang ×2

json ×2

libc++ ×2

boost-bind ×1

function ×1

noncopyable ×1

qt ×1

shared-ptr ×1

stdbind ×1

stl ×1

tr1 ×1