boost::const和nonconst的变体

boost::variant of const and non-const

本文关键字:const boost nonconst      更新时间:2023-10-16

我想创建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;
}

这需要额外的空间来存储数据(如果有的话)。在某些情况下,它可能比问题的原始表述更合适。

相关文章: