gpt4 book ai didi

c++ - 如何获取提供 const 重载的函数类型?

转载 作者:太空狗 更新时间:2023-10-29 20:22:40 24 4
gpt4 key购买 nike

假设我有以下类(class):

class C
{
public:
void f( int ) {}
void f( int ) const {}
};

f 的两个重载之间的唯一区别是其中一个是const。我不能使用 decltype( &C::f ) 因为仍然有歧义。

我想通过traits类获取函数信息,所以需要提供函数类型。

最佳答案

您可以通过将 &C::f 传递给期望的函数来强制选择非 const C::f 重载指向非 const 成员函数的指针。也就是说,

template <class C, class Ret, class... Args>
// trailing return type can be omitted in C++14
constexpr auto g(Ret (C::*p)(Args...)) -> decltype(p) {
return p;
}

static_assert(std::is_same<void (C::*)(int), decltype(g(&C::f))>::value, "wrong overload");

(请注意,如果要支持:C 样式可变参数函数、volatile 限定函数或 ref 限定函数,则需要完成额外的工作。)

关于c++ - 如何获取提供 const 重载的函数类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36875838/

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