【发布时间】:2015-12-04 15:46:29
【问题描述】:
考虑以下引用包装器:
template <class T>
struct wrapper
{
wrapper(T& x): reference{x} {}
void set(const T& x) {reference = x;}
T& get() const {return reference;}
T& reference;
};
我想知道:
- 如何仅通过模板别名声明 const 引用包装器
template <class T> using const_wrapper = /* const wrapper<T> or wrapper<const T>?*/ - 如果在这种状态下不可能,如何更改包装器结构以使前面的点成为可能?
- 如何解决以下问题:
int i = 42; wrapper<const char> w(i);会编译但不工作(我想阻塞构造函数) - 究竟是什么问题,
iterator和const_iterator一般有两种不同的实现方式?
【问题讨论】:
-
您不使用
std::reference_wrapper的原因是什么? -
这个例子旨在了解发生了什么。如果我想要一个引用包装器,我会使用 std::reference_wrapper。
-
"如何仅通过模板别名声明 const 引用包装器
template <class T> using const_wrapper = /* const wrapper<T> or wrapper<const T>?*/" 你是说 const(引用包装器)还是(const 引用)包装器?甚至是 const(const 引用)包装器? -
另一个问题:当
set(const T&)被调用时,你希望你的 const 引用包装器做什么? -
@SimonKraemer: set(const T&) 应该设置引用的值。
标签: c++ c++11 reference constants template-classes