gpt4 book ai didi

c++ - 如何强制派生类实现静态函数,该函数接收派生类的对象作为参数

转载 作者:太空宇宙 更新时间:2023-11-04 11:36:20 25 4
gpt4 key购买 nike

我定义了一个类A,里面定义了一个静态函数。假设

class A{

// virtual functions

// the function create the object and sets its fields according to inputs
static bool create(vector<string> inputs, A* a);

}

是否可以强制派生类按以下方式实现compute功能?

class B : public class A{

// virtual functions

static bool create(vector<string> inputs, B* b);
}

class C : public class A{

// virtual functions

static bool create(vector<string> inputs, C* c);
}

最佳答案

不,没有办法。 “强制”一个类实现一个函数只能用纯虚函数来实现(即使那样你也不会真正强制它,因为派生类本身可能保持抽象)。

想一想。您正在尝试组合两种不兼容的 C++ 机制。

virtual 总是与objects 有关。您有一个派生类型的对象和一个指向基类型的指针或引用。虚函数的整个想法只对对象有意义。

static 相反, 需要一个对象。您首先使用 static 的原因恰恰是:您想在没有对象的情况下调用某些东西。

所以这只是两个不同的世界,真的。您在问“如何让编译器在运行时根据对象的派生类型选择一个函数而不需要对象?”

也许您真正需要的是模板。使用模板,您可以要求类型在特定上下文中使用时具有特定功能:

template <class T>
void f()
{
T::compute(my_vector);
}

无论如何,您的实际目标似乎是解决更高层次的问题,但您为此使用了错误的工具。

关于c++ - 如何强制派生类实现静态函数,该函数接收派生类的对象作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22968974/

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