传递未知类作​​为参数

时间:2016-04-08 07:41:14

标签: c++ oop templates casting

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

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

1 个答案:

答案 0 :(得分:1)

没有模板,以合理的方式是不可能的。也许你可以使用一些宏来达到类似的效果,但我会高度劝阻它,因为它可能不会给你类型安全。

你必须使用这样的东西:

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

Live demo