对于类型类::类型,我可以从常量类派生常量类::类型吗?

For a type Class::Type, can I derive const Class::Type from a const Class?

本文关键字:类型 常量 派生 我可以 于类型      更新时间:2023-10-16

>我正在实现一个容器,如下所示:

template<typename T>
class Container
{
public:
using value_type = T;
...
};

有没有从const Container中得出const value_type的好方法?

背景:

我已经通过嵌套模板类实现了迭代器类型:

template<typename Container, typename Value>
class iterator_base
{
public:
...
Value& operator*() const;
private:
Container* c;
};
using iterator = iterator_base<Container, value_type>;
using const_iterator = iterator_base<const Container, const value_type>;

这工作正常,但iterator_base的第二个模板参数感觉是多余的。

显而易见的方法是删除第二个参数,并依靠第一个参数的恒常性来确定是否应该添加const参数。标准库为此提供了一些有用的元函数:

#include <type_traits>
template<typename Container>
class iterator_base
{
using Value = typename std::conditional<std::is_const<Container>::value,
typename std::add_const<typename Container::value_type>::type,
typename Container::value_type>::type;
public:
...
Value& operator*() const;
private:
Container* c;
};
相关文章: