对于类型 Class::Type,我可以从 const Class 派生出 const Class::Type 吗?
For a type Class::Type, can I derive const Class::Type from a const Class?
我正在实施这样的容器:
template<typename T>
class Container
{
public:
using value_type = T;
...
};
有没有从const Container
推导出const value_type
的好方法?
背景:
我已经通过嵌套模板实现了迭代器类型 class:
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;
};
我正在实施这样的容器:
template<typename T>
class Container
{
public:
using value_type = T;
...
};
有没有从const Container
推导出const value_type
的好方法?
背景:
我已经通过嵌套模板实现了迭代器类型 class:
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;
};