我想创建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
。
如何存储const
类型值的F
版本?
答案 0 :(得分:0)
这不是解决方案,而是有用的东西:
#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;
}
这需要额外的空间来存储数据(如果有的话)。在某些情况下,它可能比问题的原始表述中的更合适。