将boost::optional与boost::adapter::indirected一起使用
Use boost::optional together with boost::adaptors::indirected
我正在尝试编译以下代码:
#include <iostream>
#include <iterator>
#include <vector>
#include <boost/assign/std/vector.hpp>
#include <boost/optional.hpp>
#include <boost/range/adaptor/indirected.hpp>
#include <boost/range/algorithm/copy.hpp>
int main( int argc, char ** argv )
{
using namespace boost::assign;
using boost::adaptors::indirected;
std::vector<boost::optional<unsigned> > values;
values += 1u,2u,3u;
boost::copy( values | indirected, std::ostream_iterator<unsigned>( std::cout, " " ) );
std::cout << std::endl;
}
但是,我遇到了一些错误,例如boost::optional<unsigned>
中没有名为element_type
的类型。然而,参考页面上说,唯一的前提条件是operator*()
一元函数的存在。有办法让它发挥作用吗?
这肯定是Boost中的一个错误,但这个错误是在Boost.Optional还是Boost.Iterator中还有待讨论(我个人认为是后者)。
然而,修复是微不足道的——在包含任何Boost标头之前,请执行以下操作:
#include <boost/optional/optional_fwd.hpp>
#include <boost/pointee.hpp>
namespace boost
{
template<typename P>
struct pointee<optional<P> >
{
typedef typename optional<P>::value_type type;
};
}
然后根据需要包括其他Boost标头。
请在Boost-Trac上提交票证,或者至少在Boost-Users邮件列表上发布错误报告。
查看boost iostreams库中定义的private optional.hpp。您将看到它定义了typedef T element_type;
然而,您在这里定义的实际optional.hpp并没有定义它。所以这就是编译器抱怨的原因。我不知道为什么它被忽视了。
请尝试使用iostreams库中的private选项.hpp来解决此问题。我希望这能有所帮助。
相关文章:
- 将 boost::odeint 与向量类一起使用,而无需调整向量的大小
- 如何将boost::asio::d eadline_timer 与Qt一起使用?
- 如何将来自 Boost.Python 的map_indexing_suite与自定义而不是标准对象一起使用?
- boost::interprocess::file_lock 与 std::ostream 一起使用时的错误行为
- 将boost::filtering_streambuf与newline_filter一起使用时为空文件
- 如何将前向声明与 boost::msm 一起使用以避免循环依赖?
- 将Bazel与本地Boost安装一起使用
- 将 boost::function 与指向派生类的共享指针的参数一起使用
- 在Windows 10和Visual Studio Community 2019下,将Boost与Bazel一起使用
- 将 boost-di 与配置文件和共享库一起使用
- Boost Asio和Co_await-与任何第三方回调一起使用
- 可以将boost :: unordered_map与std :: shared_ptr一起使用
- 将 boost odeint 与 std::map 和自定义向量空间代数一起使用时,没有可行的重载'='
- 无法让 matplotlib 事件处理程序与 Boost.Python 一起工作
- 将 boost::object_pool 与矢量一起使用时指针无效
- 如何与CMAKE一起使用VS 2017编译的Boost Filesystem库
- 如何将 boost::atomic_store 与 shared_ptr<T> 和 shared_ptr<const T> 一起使用?
- 与Boost一起使用溪流
- 我可以将 std::function (C++11 lambda) 与 Boost 一起使用吗?
- 将物理常数与boost一起使用