我有一个基类和一个派生类,我想更改基函数,同时保持它们是静态的,因为它们应该作为静态传递给其他函数。
我怎样才能做到这一点?
我有一个基类和一个派生类,我想更改基函数,同时保持它们是静态的,因为它们应该作为静态传递给其他函数。
我怎样才能做到这一点?
ATL 框架通过使基类成为模板,然后让派生类将其类类型作为模板参数传递,从而绕过了无虚拟静态的限制。然后基类可以在需要时调用派生类静态,例如:
template< class DerivedType >
class Base
{
public:
static void DoSomething() { DerivedType::DoSomethingElse(); }
};
class Derived1 : public Base<Derived1>
{
public:
static void DoSomethingElse() { ... }
};
class Derived2 : public Base<Derived2>
{
public:
static void DoSomethingElse() { ... }
};
这被称为Curiously recurring 模板模式,可用于实现静态多态性。
您的意思是您需要一个指向静态函数的指针(例如,作为参数传递给另一个需要指向静态函数的指针的函数),但您需要虚拟访问该函数指针?在这种情况下,使用虚函数来获取函数指针:
typedef void (*function)();
void do_stuff_with_function(function);
struct Base {
virtual ~Base() {}
virtual function get_function() = 0;
};
struct Derived : Base {
function get_function() {return my_function;}
static void my_function();
};
Derived d;
do_stuff_with_function(d.get_function());
静态函数不能是虚拟的,因为它们没有访问它们的实例。我相信你可以覆盖它们。
C++ 中不能有静态虚函数。
虚函数通常依靠this
指针来确定在运行时要调用的函数的类型。
静态成员函数不传递,this
因此 C++ 中不允许使用静态虚函数。
如果我理解你的问题是正确的,那么你可以遵循以下方法,否则忽略..
在基类中有静态函数指针。
在基类中有一个静态函数(您在其中使用该静态函数指针调用该函数)..
在派生类中,将静态函数指针设置为您希望执行的函数定义。(在基类中,您可以将函数指针设置为某个默认函数)。
你不能拥有静态虚函数,因为拥有它们没有意义。