我有一个容器类,它使用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
是否支持常量类型?如果不支持,我该如何解决这个问题?- 是否有现成的traits实现可用,我可以使用而不是定义自己的traits?
任何帮助都将是极好的!
const foo*
当然不是 const 类型,foo* const
才是。 - MSalters