gpt4 book ai didi

c++ - 成员函数和const成员函数指针推导

转载 作者:太空宇宙 更新时间:2023-11-04 12:10:10 25 4
gpt4 key购买 nike

我有以下代码:

template <class Ret>
class Foo
{
public:
template <class T>
void foo(T&, const std::function<Ret()>&)
{
std::cout << "std::function<Ret()>\n";
}
template <class T>
void foo(T&, Ret(T::*)() const)
{
std::cout << "Ret(T::*)() const\n";
}
template <class T>
void foo(T&, Ret(T::*)())
{
std::cout << " Ret(T::*)()\n";
}
};

class A
{
public:
void foo1() const
{
}
void foo()
{
}
};

int main()
{

A a;
Foo<void> f;
f.foo(a, &A::foo);
f.foo(a, &A::foo1);
f.foo(a, std::bind(&A::foo, a));
}

它运行良好,但我不想为 const 和非 const 成员函数指针设置 2 个不同的函数。所以问题是:有没有办法合并 void foo(T&, const std::function<Ret()>&)void foo(T&, Ret(T::*)() const)一个功能?请注意,有 std::function合并后也应该参与解析的重载。我需要一些只接受成员函数指针的函数。所有其他的都将进入std::function版本。

最佳答案

您似乎在问一个隐性问题和一个显性问题。您隐含的问题“如何合并 const 和非常量版本”的答案如下

template<typename T, typename U, typename enable_if<is_fuction<T>::value, int>::type = 0> 
void takesboth(T U::*);

关于c++ - 成员函数和const成员函数指针推导,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10205248/

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