我有一个cpp类,并且其中定义了一些方法。 静态方法之一需要调用同一类的非静态方法。我无法使用“ this”指针执行此操作,因为无法使用静态函数“ this”指针。
我需要某种方式在cpp的静态方法中访问指向同一类的指针...有人可以帮忙吗
答案 0 :(得分:1)
让静态函数接受类的引用参数。示例:
.file "test.c"
.globl top
.bss
.align 8
.type top, @object
.size top, 8
top:
.zero 8
.text
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
nop
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE0:
.size main, .-main
.ident "GCC: (Ubuntu 5.4.0-6ubuntu1~16.04.11) 5.4.0 20160609"
.section .note.GNU-stack,"",@progbits
用法:
struct Foo {
void func() { }
static void static_func(Foo& obj)
{
obj.func();
}
};
您可以改为使用Foo foo;
Foo::static_func(foo);
参数。在这种情况下,您显然需要传递一个指针(Foo* obj
)。
话虽这么说,您的函数似乎一开始就应该不是静态的。使其变为非静态。
答案 1 :(得分:0)
假设该类的任何实例都可以,为什么静态函数不能仅创建自己的临时类实例?特别是如果有默认构造函数。 例如,下面的代码可以正确编译:
class Circle
{
public:
Circle(double centerX, double centerY, double radius);
Circle() : Circle(0.0, 0.0, 1.0) // unit circle by default
{}
inline double getRadius() { return radius; };
inline double getArea() { return area; };
static double computePi(); // HERE
private:
double centerX, centerY, radius, area;
};
Circle::Circle(double centerX, double centerY, double radius)
: centerX(centerX), centerY(centerY), radius(radius)
{
area = 3.14159*radius*radius;
}
double Circle::computePi() // static class function, no "this" allowed
{
Circle tmpC1; // temporary instance here !
Circle* tmpThis = &tmpC1;
double radius = tmpThis->getRadius();
double area = tmpThis->getArea();
double pi = area / (radius*radius);
return pi;
}
好的,语义看起来有些毛茸茸,但在您自己的上下文中看起来可能更好。