gpt4 book ai didi

c++ - 自动添加符合 CV 条件的函数

转载 作者:搜寻专家 更新时间:2023-10-31 00:10:10 25 4
gpt4 key购买 nike

我有下一节课

class Parameter
{
private:
T value_;

public:
// Get
T& value() { return value_; }
volatile T& value() volatile { return value_; }
const T& value() const { return value_; }
const volatile T& value() volatile const { return value_; }
}

如何最大限度地减少行数和代码量。我想写一次 T& value() 并自动获得 CV 合格的版本。可能吗?

最佳答案

如果您要公开对变量的每个引用,请公开该变量。

现在 p.value_ 完全符合您的要求。

除此之外,最简单的方法是编写:

template< class A, class B >
using same_test = std::enable_if_t< std::is_same< std::decay_t<A>, std::decay_t<B> >{}, int>

然后在类里面写:

template<class Self, same_test<Self, Parameter> =0>
friend decltype(auto) get_value( Self&& self ) {
return decltype(self)(self).value_;
}

现在 get_value( p ) 将返回具有正确 l/r/cv 资格的 p.value

如果你不喜欢那种语法,我可以为你提供(p->*value)():

template<class F>
struct magic_method_ptr_t {
F f;
template<class Lhs>
friend auto operator->*(Lhs&& lhs, magic_method const& m) {
return [&](auto&&...args)->decltype(auto) {
return m.f( decltype(lhs)(lhs), decltype(args)(args)... );
};
}
};
template<class F>
magic_method_ptr_t<F> magic_method_ptr( F f ) { return {std::move(f)}; }

auto value = magic_method_ptr( [](auto&& x){ return get_value(decltype(x)(x)); }

将此添加到上面的 get_value 案例中,(p->*value)() 就可以工作了。

我无法为您提供 p.value() 语法,除非有丑陋的宏。

关于c++ - 自动添加符合 CV 条件的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39498501/

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