将未知类作为参数传递

Passing an unknown class as parameter

本文关键字:参数传递 未知      更新时间:2023-10-16

我是OOP的初学者,我的代码很难处理。问题是,我只想发送一个未知类作为参数,这样我就可以在函数内部进行强制转换,并调用特定类中的方法(作为参数传递)。我想知道是否有一些技巧可以让我不必使用模板,因为我不太了解它们。我的程序包含更多具有相同名称的方法的类,所以在这一点上不会出现问题。如果我还没有说清楚,请在下面留言,我会尽力解释的。谢谢

void myClass::myFunc( _myInstance, _myMethod,void* object )
{
  ((_myInstace*)object)->_myMethod();   
}

没有模板,这是不可能的。也许你可以使用一些宏来实现类似的效果,但我强烈反对这样做,因为它可能不会给你类型的安全性。

你必须使用这样的东西:

template<typename Type>
void func(void (Type::*method_name)(), void* object) { 
    (static_cast<Type*>(object)->*method_name)(); 
}

然后像这样使用:

struct A { void fn() { std::cout << "Ok!"; } };
int main() {
    A a;
    void* ptr = &a;
    func(&A::fn, ptr);
}

现场演示