我目前正在编写一个接口类,它应该提供对复杂结构的内部元素作为 const 或非 const 引用的访问。这个想法是某些模块被授予 const 访问权限,而某些模块被授予完全访问权限。
我已经使用 'type_traits' 'std::add_const' 有条件地限定内部成员函数的返回类型,不幸的是我想不出有条件地将成员函数限定为 const 或非 const 的方法。
这甚至可能吗?如果是这样怎么办?
例如:
template< typename T, bool isConst >
struct apply_const
{
typedef T type;
};
template<typename T>
struct apply_const<T, true>
{
typedef typename std::add_const<T>::type type;
};
template< bool isConst >
const Interface
{
/// @brief get the TypeA member
typename apply_const<TypeA, isConst >::type& GetXpo3Container() // how do I conditionally add a const qualifier
{
return config_.type_a_member_;
}
typename apply_const<Profile, isConst >::type& GetProfile( unint32_t id ) // qualifier ???
{
return config_.profiles.get( id );
}
// .... lots more access functions
ConfigType config_; // the config
};
注意:分离/创建两个版本的接口的根本原因是它们将提供对不同实例的访问config
——一个是可写的,一个是不可写的。正在开发的子系统是一个嵌入式Netconf Agent,它支持<running>
和<candidate>
配置。