对于类型类::类型,我可以从常量类派生常量类::类型吗?
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
的好方法?
背景:
我已经通过嵌套模板类实现了迭代器类型:
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;
};
相关文章:
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 私有类型的静态常量成员
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 是否有内置方法可以强制转换为不同的基础类型,但保留常量限定符?
- 从 BubbleSort* 类型的右值初始化 'AssortedSorter&' 类型的非常量引用无效"
- 常量函数,当其参数是对文字类型的引用时
- 错误:请求从"常量字符 [5]"转换为非标量类型"字符串"
- 为什么"具有常量成员的结构"类型的指针不能指向"具有非常量成员的结构"?
- 常量成员函数中成员变量的类型
- 无法将类型"T&"的非常量左值引用绑定到类型"T"的右值 t++ std::atomic<T>
- 从 Typedef 数据类型中删除常量
- 为什么定义复制构造函数会给我错误:无法将类型 'obj&' 的非常量左值引用绑定到类型为"obj"的右值?
- 将整型常量映射到类型
- 我正在将一个 std::string 传递给一个 boost 函数,该函数对该类型进行常量引用,但该值发生了变化
- 对于非常量指针类型的参数,未调用具有常量指针模板类型参数的功能
- 为什么我总是收到此错误:从类型为"农场动物"的右值初始化类型的非常量引用无效|
- 输入参数类型"常量双 *&"是什么意思?
- 从何处获取设备类型常量描述
- 在标头中使用类型常量作为数组大小C++