gpt4 book ai didi

c++ - 向成员函数添加 const 限定符

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:31:00 25 4
gpt4 key购买 nike

我目前正在编写一个接口(interface)类,它应该提供对复杂结构的内部元素作为常量或非常量引用的访问。这个想法是一些模块被授予 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
};

注意:分离/创建 2 个版本的界面的根本原因是它们将提供对 config 的不同实例的访问。 - 一种可写,一种不可写。正在开发的子系统是嵌入式Netconf Agent,支持<running><candidate>配置。

最佳答案

这似乎是特化最容易做到的:

template< bool isConst >
struct Interface;

template <>
struct Interface<false>
{
TypeA& GetXpo3Container()
{
return config_.type_a_member_;
}
};

template <>
struct Interface<true>
{
const TypeA& GetXpo3Container() const
{
return config_.type_a_member_;
}
};

编辑:虽然我不完全确定这添加了什么。拥有它岂不是更容易

struct Interface
{
TypeA::type& GetXpo3Container()
{
return config_.type_a_member_;
}
const TypeA::type& GetXpo3Container() const
{
return config_.type_a_member_;
}
};

并在适当的地方使用const Interface?还是出于其他原因这不是一个选择?

编辑 2:我的 std::enable_if 使用错误,现在已经不存在了。

关于c++ - 向成员函数添加 const 限定符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10110082/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com