Я хочу разрешить постоянную или не постоянную итерацию над классом контейнера, который я написал. Мой контейнер хранит элементы в std::vector
ссылок не const
(назовите это elements
). Я использую подталкивание-х transform iterator, чтобы сделать это, например:Функция для преобразования из T в const T в C++
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
, но как фактическая функция. (В качестве альтернативы, если кто-нибудь знает, как лучше лениво преобразовать вектор переменных в вектор констант, это будет еще лучше.)
Идеальный. Я забыл такие вещи, как constexpr и ссылочные параметры, поэтому я хотел найти стандартную реализацию. : P –
Для полноты следует сказать, что это * позволяет * допускать временные, если они являются 'const', в качестве аргументов. –
@ JohannesSchaub-litb. Поскольку это не ссылка на пересылку, временные файлы могут приниматься только в том случае, если заданы явные аргументы шаблона, такие как ['std :: as_const (A())' ** или ... ** 'std :: as_const (static_cast (A()));] (http://coliru.stacked-crooked.com/a/77d58c9af7e711af) ... Но почему кто-то даже захочет это сделать? –
WhiZTiM