boost::const和nonconst的变体
boost::variant of const and non-const
我想创建template< typename F > using T = boost::variant< F, F const >;
类型,将只读和读写可访问的值存储到同一个std::vector< T >
中。但我遇到了以下编程问题:
#include <iostream>
#include <cstdlib>
#include <boost/variant.hpp>
int main()
{
using F = double;
using CV = boost::variant< F const, F >;
F const c = 0.0;
CV C(c);
F v = 0.0;
CV V(v);
std::cout << C.which() << ' ' << V.which() << std::endl;
return EXIT_SUCCESS;
}
输出:1 1
。如何存储类型为F
的值的const
版本?
这不是解决方案,而是有用的东西:
#include <iostream>
#include <functional>
#include <cstdlib>
#include <boost/variant.hpp>
int main()
{
using F = double;
using CV = boost::variant< std::reference_wrapper< F const >, std::reference_wrapper< F > >;
F const c = 0.0;
CV C(std::ref(c));
F v = 0.0;
CV V(std::ref(v));
std::cout << C.which() << ' ' << V.which() << std::endl;
return EXIT_SUCCESS;
}
这需要额外的空间来存储数据(如果有的话)。在某些情况下,它可能比问题的原始表述更合适。
相关文章:
- 在其他容器中使用 boost::container::static_vector 时,GCC 编译错误"将'const s'绑定到类型's&'的引用丢弃限定符"
- C++ Boost - 序列化错误 - 将"const B"作为"this"参数
- 正在初始化const boost multi_array
- 使用 Boost 对具有 const 成员的类进行序列化
- 为什么 boost asio 中的 async_read 将 const MutableBufferSequence 作
- C++ CMake 构建错误:未定义对"boost::throw_exception(std::exception const&)"的引用
- 声明“const”“boost::range”的正确方法
- c boost.python不能将const char*转换为str
- 将 Boost Python 与 shared_ptr<const T 结合使用>
- Cmake 对 'boost::gregorian::greg_month::as_short_string() const' 的未定义引用
- 如何将 boost::atomic_store 与 shared_ptr<T> 和 shared_ptr<const T> 一起使用?
- 为什么BOOST.RANGE RANGE_BEGIN/END FREE功能对const和非const引用都重载
- 一个神秘的编译错误:无法从"const boost::<T>shared_ptr"转换为"const boost::shared_ptr<T>"
- boost ::变体 - 为什么模板参数比const字符串参数具有更高的优先级
- 如何创建const boost::iterator_range
- 使用"(boost::any a)"而不是"(const boost::any&a)"来防止引用到引用
- boost::shared_ptr::shared_ptr(const boost::shared_ptr&)' 被隐式声明为已删除
- 提升精神:错误 C2664,无法将"const boost::p hoenix::actor"<Eval>转换为"char"
- 无法从"const boost::asio:::const_buffers_1"转换为"boost::asio::mutable_buffer"
- const boost::array<T,N> or boost::array<const T,N>?