Как заставить неявное преобразование в полиморфизм? - PullRequest
1 голос
/ 06 января 2012

Пожалуйста, рассмотрите этот пример, как нам принудительно вызвать неявное преобразование в функции, вторым параметром которой является указатель на функцию-член.явное приведение в список аргументов функции - это не то, чего я хочу достичь сейчас.Вместо этого я хотел бы, чтобы компилятор как-то делал это так же, как это делает параметр FIRST ...

struct Base
{
    virtual ~Base() = 0 {}
};

struct Derived : public Base
{
    void f(){}
};

typedef void(Base::*polymorph)();

// how do I force IMPLICIT conversion here: EDIT: (polymorph type work only for polymorph pointer type no conversion)
void func(Base* arg1, polymorph arg2) // void* arg2, (void*) arg2 etc...  dosn't work
{
    polymorph temp = reinterpret_cast<polymorph>(arg2); // to achive this
}

int main()
{
    Derived* test = new Derived;
    // first parameter work but another gives an error
    func(test, &Derived::f); // BY NOT CHANGING THIS!
    delete test;
    return 0;
}

1 Ответ

2 голосов
/ 09 января 2012

Так чисто, как только можно. Код ниже. Но я понятия не имею, на какой указатель «this» будет ссылаться, когда фактически вызывается «temp».

typedef void(Base::*polymorph)(); 

void func(Base* arg1, polymorph arg2)
{ 
    polymorph temp = arg2;
} 


int main() 
{ 
    Derived* test = new Derived; 
    // first parameter work but another gives an error 
    func(test, static_cast<polymorph>(&Derived::f)); 
    delete test; 
    return 0; 
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...