gpt4 book ai didi

c++ - 如何测试方法是否为const?

转载 作者:可可西里 更新时间:2023-11-01 15:45:20 26 4
gpt4 key购买 nike

如何获取一个 bool 值来指示已知方法是否具有 const 限定符?

例如:

struct A {
void method() const {}
};

struct B {
void method() {}
};

bool testA = method_is_const<A::method>::value; // Should be true
bool testB = method_is_const<B::method>::value; // Should be false

type_traits header 我找到了一个 is_const我可以使用测试,但我需要方法类型,但我不确定如何获取它。

我试过:std::is_const<decltype(&A::method)>::value但它不起作用,我能理解为什么(void (*ptr)() const) != const void (*ptr)())。

最佳答案

检查成员函数是否可以在 const 上调用要简单得多-限定左值。

template<class T>
using const_lvalue_callable_foo_t = decltype(std::declval<const T&>().foo());

template<class T>
using has_const_lvalue_callable_foo = std::experimental::is_detected<const_lvalue_callable_foo_t, T>;

冲洗并重复,除了 std::declval<const T>() , 检查是否可以在 const 上调用所述函数-合格的右值。我想不出 const && 的好用例成员函数,因此检测这种情况是否有意义值得怀疑。

咨询当前Library Fundamentals 2 TS working draft关于如何实现is_detected .


检查特定的指向成员函数的指针类型是否指向具有特定 cv-qualifier-seq 的函数类型要复杂得多。这需要每个 cv-qualifier-seq 6 个部分特化(constconst volatile 是不同的 cv-qualifier-seq),并且仍然无法处理重载成员函数或成员函数模板。草拟想法:

template<class T> 
struct is_pointer_to_const_member_function : std::false_type {};

template<class R, class T, class... Args>
struct is_pointer_to_const_member_function<R (T::*)(Args...) const> : std::true_type {};

template<class R, class T, class... Args>
struct is_pointer_to_const_member_function<R (T::*)(Args...) const &> : std::true_type {};

template<class R, class T, class... Args>
struct is_pointer_to_const_member_function<R (T::*)(Args...) const &&> : std::true_type {};

template<class R, class T, class... Args>
struct is_pointer_to_const_member_function<R (T::*)(Args..., ...) const> : std::true_type {};

template<class R, class T, class... Args>
struct is_pointer_to_const_member_function<R (T::*)(Args..., ...) const &> : std::true_type {};

template<class R, class T, class... Args>
struct is_pointer_to_const_member_function<R (T::*)(Args..., ...) const &&> : std::true_type {};

如果你想要const volatile成为true同样,按照这些思路淘汰另外 6 个部分特化。

关于c++ - 如何测试方法是否为const?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30407754/

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