gpt4 book ai didi

C++:从父调用子静态方法

转载 作者:行者123 更新时间:2023-11-30 01:57:51 25 4
gpt4 key购买 nike

简单地说,我需要按照标题所说的那样做:从父级调用子级静态方法。问题是我不知道父类中的子类名称,因为可能有多个子类。静态方法需要保持静态。例如:

class A{ // parent class
public:
void process(){
getData(); // <-- Problem
}
}

class B: public A{ // child class
static int getData();
}

void main(){
B b;
b.process();
}

想到的一个解决方案是使用调用静态方法的虚拟方法。这不是很好,这意味着我必须为我的每个 child 实现该方法:

class A{ // parent class
virtual int getDataFromStaticMethod() = 0;
public:
void process(){
getData(); // <-- Problem
}
}

class B: public A{ // child class
static int getData();
virtual int getDataFromStaticMethod(){
return B::getData();
}
}

void main(){
B b;
b.process();
}

但我真的希望可以用静态方法实现纯虚方法:

class A{ // parent class
virtual int getData() = 0;
public:
void process(){
getData(); // <-- Problem
}
}

class B: public A{ // child class
static int getData();
}

void main(){
B b;
b.process();
}

有什么建议吗?

谢谢!

最佳答案

您可以使用模板。

template<typename TChild>
class A
{
typedef TChild child_type;

public:
void process()
{
child_type::getData();
}
};

class B: public A<B>
{
static int getData();
};

class C: public A<C>
{
static int getData();
};

int main(int argc, char** argv)
{
B b;
b.process();

C c;
c.process();
}

注意:

如果您想在基类中保持静态状态,或者如果您需要保持基类对象的集合,那么您将需要一个额外的层:

class ABase
{
//any static state goes here
public:
virtual int process() = 0;
};

template<typename TChild>
class A: public ABase
{
typedef TChild child_type;

public:
int process()
{
child_type::getData();
}
};


class B: public A<B>
{};


std::vector<ABase*> a_list;

关于C++:从父调用子静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18177219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com