c++ - 静态类方法指针数组的正确语法

标签 c++ pointers

<分区>

我是函数指针的新手,对语法很着迷。我想要做的是在一个类中定义一组函数来进行字符串匹配。匹配函数及其存储数组将是静态的,因为它们将被该类的所有实例共享。这些函数存储在一个数组中,因此我可以在 match() 中迭代并尝试不同的函数。另外,我试图在全局范围内对函数指针进行类型定义,因为类似的匹配函数将在许多此类类中使用。我发现一些东西表明签名可能应该是 bool(Money::FP)(char str) 但是,如果是真的,我没有办法全局定义它(即对于类除了“钱”)?

下面的代码无法编译,所以请将其视为我正在尝试完成的伪代码。

钱.h:

typedef bool(*FP)(char* str);

class Money
{

private:
    static FP matchers[3] = {
        Money::m1,
        Money::m2,
        Money::m3
    };

    static bool m1(char* str);
    static bool m2(char* str);
    static bool m3(char* str);

public:
    static void match(char* str);
};

最佳答案

它不起作用,因为 Money::m1在其声明中引用 Money 类型。尝试将它们解耦,例如

class Money {
  private:
    static FP matchers[3];
};

FP Money::matchers[3] = {
        Money::m1,
        Money::m2,
        Money::m3
    };

在任何情况下,您都可以考虑使用 std::function<bool(char*)>而不是函数指针,因为您正在使用 C++。在您证明它是一个问题之前,性能不是问题。

关于c++ - 静态类方法指针数组的正确语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34684331/

相关文章:

c++ - 成员指针在函数返回时被覆盖?

c++ - 使用MinGW编译器编译C++程序时如何增加堆栈大小

c++ - 无法重定向程序的控制台输出

c++ - 媒体基金会 : Getting a MediaSink from a SinkWriter

c++ - 我的静态库 header 中的 void 函数问题

c# - 在 C# 中有效使用指向任意内存位置的原始指针

c - 错误: return value type does not match the function type

c++ - 关于C++中的动态内存分配

c++ - 将指针转换为数组(int* 到 int[2])

c++ - 是否可以使用 openMP 以 O(1) 复杂度初始化 vector ? (C++)