【发布时间】:2010-02-21 17:12:40
【问题描述】:
我有一个容器类,它使用boost::optional 来保存值。这是代码的样子,
template<typename T>
struct traits
{
typedef T value_type;
typedef T& reference;
};
template<typename T>
struct traits<const T>
{
typedef const T value_type;
typedef const T& reference;
};
template<typename T>
struct traits<T*>
{
typedef T* value_type;
typedef T* reference;
};
template<typename T>
struct traits<const T*>
{
typedef const T* value_type;
typedef const T* reference;
};
template<typename T>
class container
{
public:
typedef typename traits<T>::reference reference;
typedef typename traits<T>::value_type value_type;
container() {}
void set(reference value) {
op.reset(value);
}
reference get() const {
return boost::get(op);
}
private:
boost::optional<value_type> op;
};
int main()
{
foo f;
container<const foo> c;
c.set(f);
return 0;
}
它适用于除const 之外的其他类型。当我使用 const 类型时出现错误(const foo* 工作正常)。
-
boost::optional是否支持常量类型?如果不是,我该如何解决这个问题? - 是否有现成的可用特征实现可供我使用,而不是定义我自己的特征?
任何帮助都会很棒!
【问题讨论】:
-
const foo*当然不是 const 类型。foo* const是。
标签: c++ templates boost const-correctness