从静态函数调用非静态变量 在学习C++过程中,我在尝试做某事的时候遇到了一个问题,我不知道如何处理这种情况: class Command { public: const char * Name; uint32 Permission; bool (*Handler)(EmpH*, const char* args); // I do not want to change this by adding more arguments }; class MyClass : public CommandScript { public: MyClass() : CommandScript("listscript") { } bool isActive = false; Command* GetCommands() const { static Command commandtable[] = { { "showlist", 3, &DoShowlistCommand } // Maybe handle that differently to fix the problem I've mentioned below? }; return commandtable; } static bool DoShowlistCommand(EmpH * handler, const char * args) { // I need to use isActive here for IF statements but I cannot because // DoShowlistCommand is static and isActive is not static. // I cannot pass it as a parameter either because I do not want to // change the structure of class Command at all // Is there a way to do it? } };

从静态函数调用非静态变量 在学习C++过程中,我在尝试做某事的时候遇到了一个问题,我不知道如何处理这种情况: class Command { public: const char * Name; uint32 Permission; bool (*Handler)(EmpH*, const char* args); // I do not want to change this by adding more arguments }; class MyClass : public CommandScript { public: MyClass() : CommandScript("listscript") { } bool isActive = false; Command* GetCommands() const { static Command commandtable[] = { { "showlist", 3, &DoShowlistCommand } // Maybe handle that differently to fix the problem I've mentioned below? }; return commandtable; } static bool DoShowlistCommand(EmpH * handler, const char * args) { // I need to use isActive here for IF statements but I cannot because // DoShowlistCommand is static and isActive is not static. // I cannot pass it as a parameter either because I do not want to // change the structure of class Command at all // Is there a way to do it? } };,c++,function,pointers,static,C++,Function,Pointers,Static,任何帮助都将不胜感激!:) 没有 将其作为参数传递、设置为静态或设置为非静态 没有 要么将其作为参数传递,要么将其设置为静态,要么将其设置为非静态。我认为没有任何方法可以做到这一点。原因如下: 静态成员函数未附加到任何特定对象,这意味着它无法访问其他非静态成员,因为它们已附加到对象 看起来不需要将其设置为静态成员。如果您确定要传递,则将其作为参数传递。例如,制作一个 bool isActive() 函数,并在调用此“有问题”函数时将参数从它传递到该函数的某个位置 您还可以将成员变量更改为stat

任何帮助都将不胜感激!:)

没有

将其作为参数传递、设置为静态或设置为非静态

没有


要么将其作为参数传递,要么将其设置为静态,要么将其设置为非静态。

我认为没有任何方法可以做到这一点。原因如下: 静态成员函数未附加到任何特定对象,这意味着它无法访问其他非静态成员,因为它们已附加到对象

看起来不需要将其设置为静态成员。如果您确定要传递,则将其作为参数传递。例如,制作一个

bool isActive()

函数,并在调用此“有问题”函数时将参数从它传递到该函数的某个位置


您还可以将成员变量更改为static,但看起来每个对象都需要它,而不是所有对象都需要它

我认为没有任何方法可以做到这一点。原因如下: 静态成员函数未附加到任何特定对象,这意味着它无法访问其他非静态成员,因为它们已附加到对象

看起来不需要将其设置为静态成员。如果您确定要传递,则将其作为参数传递。例如,制作一个

bool isActive()

函数,并在调用此“有问题”函数时将参数从它传递到该函数的某个位置


您也可以将成员变量更改为static,但似乎每个对象都需要它,而不是所有对象都需要它。

这里有两个可能的答案:

1.关于在静态函数中使用非静态项: 如中所述,这是不可能的,除非在静态函数中有一个特定的
MyClass
对象(并使用
object.isActive
)。不幸的是,您不能在此处执行此操作:

  • 您的代码注释清楚地表明您不能向函数调用添加
    MyClass
    参数
  • 现有参数并不表示您已经有了指向父类对象的指针
  • 在这样的上下文中,无法使用全局对象
2.关于您的目标: 似乎您希望函数是静态的,因为您希望在将脚本命令映射到函数指针的表中提供它

备选方案A

如果
commandtable
中使用的所有函数指针都是
MyClass
的成员,则可以考虑使用指向成员函数的指针,而不是指向函数的指针。在对象上设置isActive的外部对象/函数可以在它知道的MyClass对象上引用指向成员函数的指针

备选方案B


修改代码的设计以实现脚本引擎,方法是:它非常适合此类问题。这将需要对代码进行一些重构,但之后它将更易于维护和扩展

这里有两个可能的答案:

1.关于在静态函数中使用非静态项: 如中所述,这是不可能的,除非在静态函数中有一个特定的
MyClass
对象(并使用
object.isActive
)。不幸的是,您不能在此处执行此操作:

  • 您的代码注释清楚地表明您不能向函数调用添加
    MyClass
    参数
  • 现有参数并不表示您已经有了指向父类对象的指针
  • 在这样的上下文中,无法使用全局对象
2.关于您的目标: 似乎您希望函数是静态的,因为您希望在将脚本命令映射到函数指针的表中提供它

备选方案A

如果
commandtable
中使用的所有函数指针都是
MyClass
的成员,则可以考虑使用指向成员函数的指针,而不是指向函数的指针。在对象上设置isActive的外部对象/函数可以在它知道的MyClass对象上引用指向成员函数的指针

备选方案B


修改代码的设计以实现脚本引擎,方法是:它非常适合此类问题。这将需要对代码进行一些重构,但之后它将更易于维护和扩展

做一个布尔静态不也需要常数吗?这意味着如果需要,我将无法修改bool?@Chogart:为什么它需要
const
?@zenith我正在类本身中初始化它,这将要求成员const@Chogart好吧,那么你可以在外面初始化它。生成布尔静态不也需要常量吗?这意味着如果需要,我将无法修改bool?@Chogart:为什么它需要
const
?@zenith我正在类本身中初始化它,这将要求成员const@Chogart好,然后你可以在外部初始化它。如果我理解得很好,你需要函数是静态的,以便将它作为命令类中的函数指针?你需要
isActive
做什么?您想知道哪个对象是否处于活动状态?我认为您的逻辑中有一个错误,因为没有对象,调用非静态方法就没有意义。我不确定,但是如果您想知道
commandtable
中的命令是否处于活动状态,那么只需对这些对象调用方法
commandtable[I].isActive()@Christophe是的,没错。@Chogart对不起,我在回家的路上。我不太清楚,如果你想在表中有一个MyClass函数,或者表中的所有函数都是MyClass函数,
// Is there a way to do it?