在构造函数中初始化函数指针

C++ Initialize function pointer in constructor

本文关键字:函数 指针 初始化 构造函数      更新时间:2023-10-16

我有一个指向类中成员函数的函数指针。我如何初始化这个函数指针,因为我得到一个警告,每次编译。下面是代码:

//Node.h
class Node{
    bool (Node::*strategyPointer)(const unsigned int&);
    Node();
};
//Node.cpp
Node::Node(){
    //How do I initialize my pointer here?
}

谢谢

首先,您没有可以合法指向的方法,所以让我们添加一些:

class Node{
    bool (Node::*strategyPointer)(const unsigned int&);
    bool firstStrategy(const unsigned int&)  { return true;  }
    bool secondStrategy(const unsigned int&) { return false; }
public:
    Node();
};
现在我们有了一个可以初始化的有效值,只需使用:
Node::Node() : strategyPointer(&Node::firstStrategy) {}

我不会将其初始化为特定的函数,最好在实际需要时将该函数赋值给它。而是将其初始化为null:

Node::Node() : strategyPointer(nullptr)
{
}

这也可以让您轻松地测试strategyPointer是否已被if (strategyPointer!=nullptr)或仅if (strategyPointer)使用。

最后,这样做允许您选择将Node作为一个(抽象)基类,该基类实际上不具有正确签名的任何成员函数。