gpt4 book ai didi

c++ - 引用微分函数

转载 作者:太空狗 更新时间:2023-10-29 21:50:42 25 4
gpt4 key购买 nike

我有一个基类和一些派生类。我必须从他们每个人那里“注册”一些静态功能。这是示例:

class Base
{
// Some interface...
};

class Der1 : Base
{
static void Do();
};
class Der2 : Base
{
static void Do();
};

void processStatic()
{
SomeFunc(Der1::Do);
SomeFunc(Der2::Do);
}

如您所见,SomeFunc 接收函数指针。我想对每个新的派生类自动执行此操作,这可能吗?也许,在 Base 类中预定义静态函数并在那里注册。但我认为这是不可能的,是吗?


也许,这会更容易理解我想要什么:

class Der1 : Base
{
Der1() { SomeFunc(Der1::Do); }
static void Do();
};
class Der2 : Base
{
Der2() { SomeFunc(Der2::Do); }
static void Do();
};

最佳答案

编辑:由于明确的要求,完全替换了以前的答案。

您可以使用 CRTP声明一个专门的基类,它只调用您的注册函数:

#include <iostream>
void SomeFunc(void(*fp)()) {
(*fp)();
};

template <class D>
struct ExtraBass {
ExtraBass() {
static bool once;
if(!once)
SomeFunc(D::Do);
once = true;
}
};

struct Bass {
};

struct Drive : Bass, ExtraBass<Drive> {
static void Do() { std::cout << "Drive::Do\n"; }
};

struct Deride : Bass , ExtraBass<Deride> {
static void Do() { std::cout << "Deride::Do\n"; }
};

int main() {
Drive d1;
Deride d2;
Deride d3;
}

关于c++ - 引用微分函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5572164/

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