2012-06-08 38 views
2

有没有办法通过调用类方法或通过来自对象的调用来判断类的静态方法是否被调用?区分类或对象是否调用C++静态方法

class mertz 
{ 
    static int x(void) {....} 
    .... 
} 

int main(...) 
{ 
    int c = mertz::x(); 
    mertz  fred; 
    ind d = fred.x(); 
} 

能X告诉c和d在其调用的区别?

谢谢。

回答

5

不是一种可移植的方式,在大多数C++实现中可能都没有。

静态方法实际上只是一个有趣名称的全局函数。你可以在理论上检查调用堆栈从那里呼叫从会找上门来......然而,将被编译器产生的机器指令很可能将是这两个

mertx::x(); 

fred.x(); 
相同

,因为只有实例的静态类型才能找到要调用的方法,并且此信息在编译时可用。因此,在这两种情况下,呼叫代码都会调用该函数,而无需引用fred实例。

+1

“一个有趣的名字的全球功能”+1! –

6

不,没办法区分。这两个电话是相同的。

出于好奇,是否有任何理由试图做到这一点?

希望这会有所帮助!

+0

我有一个向量,其节点都是Mertz类型的所有对象。我想要一个静态的print()方法,它告诉我这个矢量是谁,并且认为如果Fred要求print()或者如果Mertz询问,可以跳过突出显示,那么让当前的Mwertz(Fred)很高兴。 –

0

你可以同时拥有静止和具有相同名称

class mertz 
{ 
    static int x(void) {....} 
    int x(void) {....} 
}; 

否则非静态函数,如已经指出的那样,X没有告诉它如何被调用的机会。

+0

这不适合我 – veio

相关问题