Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 相等运算符:指向成员函数的指针_C++_Pointers - Fatal编程技术网

C++ 相等运算符:指向成员函数的指针

C++ 相等运算符:指向成员函数的指针,c++,pointers,C++,Pointers,在我的一个类中,我包含了一个指向成员函数的指针: private: void (class_name::*_pf)(double&, gc::mag::coefficient&, gc::mag::st&, const int&) const; 此指针指向类class\u name的function1或function2 现在,当我有两个classclass\u name对象时,如何检查\u pf指针是否指向同一个成员函数(即,它们都指向function1还是f

在我的一个类中,我包含了一个指向成员函数的指针:

private:
void (class_name::*_pf)(double&, gc::mag::coefficient&, gc::mag::st&, const int&) const;
此指针指向类
class\u name
function1
function2

现在,当我有两个class
class\u name
对象时,如何检查
\u pf
指针是否指向同一个成员函数(即,它们都指向
function1
还是
function2
)?

这应该足够了:

if (this->_pf == other._pf)

例如:

#include <iostream>

class class_name
{
  public:
  void function1(int) {}
  void function2(int) {}
};

class test
{
    public:
    test(void (class_name::*pf)(int))
    : _pf(pf)
    {
    }

    bool operator==(const test& other)
    {
        return (this->_pf == other._pf);
    }

  public:
    void (class_name::*_pf)(int);
};

int main()
{
   test t(&class_name::function1);
   test t2(&class_name::function2);

   std::cout << std::boolalpha << (t == t2) << std::endl;

   return 0;
}
#包括
类名
{
公众:
无效函数1(int){}
无效函数2(int){}
};
课堂测试
{
公众:
测试(无效(类别名称::*pf)(int))
:_pf(pf)
{
}
布尔运算符==(常数测试和其他)
{
返回(此->\u pf==其他.\u pf);
}
公众:
无效(类别名称::*(内部);
};
int main()
{
测试t(&class_name::function1);
测试t2(&class_name::function2);

Std::Cube虽然C++允许使用这种方法,但它听起来像是一个基类,它由一个虚拟成员派生,而其他两个类实现两种类型的函数将是一个更好的方法。现代C++的用法是远离指针的直接使用,因为它是缺陷的根源。ike是一个棘手的代码,它将成为缺陷的来源。当您有两个函数指针时,您可以简单地将它们与if(\u pf1==\u pf2)
进行比较。请注意,这与class
class\u name
的任何实例完全无关。