2016-04-08 4 views
1

Я новичок в ООП, и мне трудно скомпоновать мой код. Проблема в том, что я просто хочу отправить неизвестный класс в качестве параметра, чтобы я мог выполнять литье внутри функции и вызывать метод из определенного класса (который был передан как параметр). Я хочу знать, есть ли какие-то трюки, чтобы я не использовал шаблоны, потому что я их не очень хорошо знаю. Моя программа содержит больше классов, которые имеют методы с тем же именем, поэтому на данный момент проблем не будет. Если я не дал мне понять, оставьте комментарий ниже, и я сделаю все возможное, чтобы объяснить. Благодаря!Передача неизвестного класса в качестве параметра

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

Ну, так как вы начали думать таким образом, возможно, самое время изучить шаблоны. Они творят чудеса. – DeiDei

+0

Есть ли способ сделать некоторые трюки, используя «sizeof» или что-то в этом роде? – braga

ответ

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

+0

Чтобы использовать этот шаблон для «void func», мне нужно ввести «template » перед определением myClass, или это необязательно? – braga

+0

@braga 'template ' объявлен параметр шаблона для функции 'fn'. Эта функция может использоваться с любым классом как с самим параметром шаблона, так и без него (как в примере). Как показано в примере, он отлично работает с классом 'A', который не имеет параметров шаблона. – Shoe

+0

Большое спасибо за вашу поддержку! Я думаю, что это тот ответ, который я искал. Хорошего дня! – braga

Смежные вопросы