C++ (C+;+;)通行证';这';将静态方法作为默认参数

C++ (C+;+;)通行证';这';将静态方法作为默认参数,c++,C++,显然,做一些类似于static void DoSomething(ClassPointer*MyPtr=this)的事情是行不通的,因为静态方法没有this,但是当我调用thisDoSomething时,我总是从调用它的类传递this,我不想每次都把它放进去 如果有某种方法可以从方法本身内部获得对调用该静态方法的类的引用,那么这种方法可以工作,但实际上没有 我有哪些选项?如果您需要将请求对象的上下文作为引用传递,我会考虑该方法是非静态实例方法。这样,您就可以在方法中引用类的其他实例成员。如果行为

显然,做一些类似于
static void DoSomething(ClassPointer*MyPtr=this)
的事情是行不通的,因为静态方法没有
this
,但是当我调用this
DoSomething
时,我总是从调用它的类传递
this
,我不想每次都把它放进去

如果有某种方法可以从方法本身内部获得对调用该静态方法的类的引用,那么这种方法可以工作,但实际上没有


我有哪些选项?

如果您需要将请求对象的上下文作为引用传递,我会考虑该方法是非静态实例方法。这样,您就可以在方法中引用类的其他实例成员。如果行为随子类的不同而变化,也许您可以使用可以重写的虚拟方法。

编写宏

#define DoSomethingX(...) DoSomething(this, __VA_ARGS__)
打电话

StaticFunctionClass::DoSomethingX(par1, par2);

如果总是传递“this”,那么可以使用宏,为什么它是静态成员函数?如果总是用实例调用静态方法,为什么只将其设置为非静态方法?它是从一个较大项目中的不同类调用的,调用它的类的实例是important@Vii是否从“各种类别”调用不管是否,静态方法都会在签名中为参数指定某种类型,即“this”。这只是一个类(基类?)。我们要问的是,为什么如果你有一个共同的行为来应用于这种类型的实例,你没有把它变成那种类型的类方法——也许是虚拟的方法(而不是完全不同类型的静态方法?)。您可能应该更具体地阐述您的情况。我认为他的意思是他有许多不同的类都调用这个静态方法(比如它可能注册了一个回调侦听器)静态方法所在的类与调用方不在同一继承层次结构中,因此需要将指针传递给调用方的类,以便稍后可以使用传入的指针调用调用方类中的成员函数。如果它是成员函数,则它必须位于每个继承层次结构中,并且不仅仅是eventListener类。有办法吗?很有趣。好的C++支持多重继承,这样你就可以有一个基本的实现,可以被任何需要它的类扩展,不是吗?我喜欢你关于回调方法的想法。也可以考虑访客模式