c++ - C++ 中具有多态性的静态方法

标签 c++ polymorphism static-methods non-static

我在使用多态性时遇到了一个奇怪的问题。 我有一个实现静态方法的基类。由于各种原因,此方法必须是静态的。基类还有一个纯虚方法run(),所有扩展类都实现了该方法。我需要能够从静态类调用 run()

当然,问题在于静态类没有 this 指针。这个方法可以传入一个 void * 参数。我一直在尝试想出一个聪明的方法来将 run 方法传递给它,但到目前为止没有任何效果。也尝试过将其传递给它。这样做的问题是我必须实例化它,这需要扩展类的知识。这违背了多态性的全部目的。

关于如何解决这个问题有什么想法吗?

最佳答案

不要将其作为 void* 指针传递,而是将其作为指向基类的指针(或引用)传递:

class BaseClass
{
public:
  static void something(BaseClass* self) { self->foo(); }
  virtual void foo() = 0;  
};

关于c++ - C++ 中具有多态性的静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1544225/

相关文章:

c++ - 神经网络的softmax激活函数的实现

c++ - 如何打破这种循环类型定义?

c++ - std::hash 特化仍未被 std::unordered_map 使用

c++ - 如何使用参数包参数 typedef 函数指针类型

c++ - 是否可以在不使用 virtual 关键字的情况下调用(同名)子函数?

java - 实例变量是否应该从 Java 中的非静态上下文中进行操作

c# - 我可以在 C# 中不指定类名的情况下将静态类作为命名空间导入来调用其方法吗?

java - Java 中子类型参数的多态性

c++ - 将 shared_ptr<Base> 作为 shared_ptr<Derived> 传递

php - 为什么静态方法不可测试?