c ++中的静态虚函数

时间:2011-06-09 10:08:49

标签: c++ inheritance c++builder virtual-inheritance static-functions

我有一个基类和一个派生类,我想更改基本函数,同时保持它们是静态的,因为它们应该作为静态传递给其他函数。

我该怎么做?

7 个答案:

答案 0 :(得分:24)

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 template pattern,可用于实现静态多态

答案 1 :(得分:3)

你的意思是你需要一个指向静态函数的指针(例如,作为参数传递给需要指向静态函数的指针的另一个函数),但你需要虚拟地访问该函数指针吗?在这种情况下,使用虚函数来获取函数指针:

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());

答案 2 :(得分:2)

静态函数不能是虚拟的,因为它们没有访问它们的实例。我确实相信你可以覆盖它们。

答案 3 :(得分:1)

你不能在C ++中拥有静态虚函数。

答案 4 :(得分:1)

虚函数通常依赖this指针来确定在运行时调用的函数类型。

静态成员函数不传递this,因此C ++中不允许使用静态虚函数。

答案 5 :(得分:0)

如果我理解你的问题是正确的,那么你可以遵循以下方法,否则忽略..

在基类中有静态函数指针。

基类中的

有一个静态函数(在其中你通过使用那个静态函数指针来调用函数)..

在派生类中将静态函数poiter设置为函数defination你希望执行..(在基类中你可以将函数指针设置为某个默认函数)。

答案 6 :(得分:-1)

你不能拥有静态虚拟功能,因为拥有它们没有意义