在C ++中从T转换为const T的函数

时间:2016-09-17 06:14:01

标签: c++ boost vector stl const

我希望允许对我编写的容器类进行常量或非常量迭代。我的容器将元素存储在非std::vector引用的const中(称之为elements)。我使用Boost的transform iterator来做这件事,例如:

auto begin() const
{
    return boost::make_transform_iterator
        ( elements.begin()
        , to_const<std::reference_wrapper<ElementType>>
        );
}

我在这里使用我编写的简单函数模板将T类型的对象转换为const T

template <typename T>
std::add_const<T>::type to_const(T value) { return value; }

我知道写作很简单,但我只是想知道是否已经有STL或Boost功能模板来执行此操作,类似于std::add_const但是作为实际功能。 (或者,如果有人知道一种更好的方法来将一个可变的矢量延迟转换为一个常量矢量,那就更好了。)

1 个答案:

答案 0 :(得分:2)

在C ++ 17中,有一个ToolCheckIn.objects.all().filter(ToolID__contains=p‌​k) 模板函数可以做到这一点,std::as_const<T>和BTW,这个(下面)不是如何编写的。

Related Field got invalid lookup: icontains

您正在通过允许临时值的值来获取参数,并且可能需要调用复制/移动构造函数;相反,使用<utility>引用(也就是说,对象不能是临时的)作为原型如下:

template <typename T>
std::add_const<T>::type to_const(T value) { return value; }

lvalue