【问题标题】:c++ pointers to operatorsc++ 指向运算符的指针
【发布时间】:2011-05-09 18:42:52
【问题描述】:

我想用 c++(或 c++0x)编写一个指针,它将指向一个类的运算符,比如说 A 或 B。 有什么方法可以做到吗?

当然有像

这样的语法
int (A::*_p) ();

但它并没有解决这个问题。我想制作通用指针,而不是为其指定基类 - 仅用于“操作符函数”的指针

#include <thread>
#include <iostream>

using namespace std;

class A
{
public:
    int operator()()
    {
        return 10;
    }
};

class B
{
public:
    int operator()()
    {
        return 11;
    }
};

int main()
{
 A a;
 int (*_p) ();
 _p = a.operator();
 cout << _p();

 B b;
 _p = b.operator();
 cout << _p();
}

【问题讨论】:

    标签: c++ pointers c++11 function-pointers operator-keyword


    【解决方案1】:

    不,你不能这样做。类类型是运算符成员函数类型的一部分。

    A::operator()() 的类型与B::operator()() 的类型不同。前者是int (A::*)() 类型,而后者是int (B::*)() 类型。这些类型完全不相关。

    您可以获得的最接近的方法是使用 C++0x 多态函数包装器 function(在 C++0x、C++ TR1 和 Boost 中找到)并使用 bind 绑定成员函数指针到一个类实例:

    std::function<int()> _p;
    
    A a;
    _p = std::bind(&A::operator(), a);
    std::cout << _p();
    
    B b;
    _p = std::bind(&B::operator(), b);
    std::cout << _p();
    

    【讨论】:

    • 非常感谢!这正是我想要的! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    • 2017-07-18
    • 1970-01-01
    • 2021-05-31
    相关资源
    最近更新 更多