Получение указателя на boost::any::operator=

Я хочу получить указатель на boost::any::operator=, поэтому я сделал это:

bool(__thiscall boost::any::*func)(const bool&) = &(boost::any::operator=<bool>);

но теперь компилятор говорит

инициализация»: невозможно преобразовать «перегруженную функцию» в «bool (__thiscall boost::any::*) (const bool &)». Ни одна из функций с этим именем в области видимости не соответствует целевому типу.

Я также пытался сделать это следующим образом:

bool(__thiscall boost::any::*func)(const bool&) = static_cast<(boost::any::*)(const bool&)>(&(boost::any::operator=<bool>));

но компилятор говорит: "синтаксическая ошибка: '('" в этой строке

кто-нибудь может мне помочь, пожалуйста?

P.S. Я делаю экземпляры boost::any в приведенном выше коде.


person brachistochron    schedule 20.09.2013    source источник
comment
Существуют различные варианты operator=, доступные в boost::any any & operator=(const any &); любой & оператор=(любой &&); template‹typename ValueType› any & operator=(const ValueType &); template‹typename ValueType› любой & operator=(ValueType &&); Какой из них вы пытаетесь получить адрес? Ошибка, вероятно, из-за неправильного назначения указателя функции   -  person Manmohan Singh    schedule 20.09.2013
comment
Я пытаюсь получить адрес шаблона‹typename ValueType› any & operator=(const ValueType & rhs); для bool, int и double. Итак, как я должен сделать это задание?   -  person brachistochron    schedule 20.09.2013


Ответы (1)


Вы не можете указать аргументы в назначении указателя функции-члена. Это сделает это:

#include <iostream>
#include <boost/any.hpp>
int main() {
    boost::any any = false;
    std::cout << boost::any_cast<bool>(any) << std::endl;
    typedef boost::any& (boost::any::*assign_operator)(const bool&);
    assign_operator assign = &boost::any::operator =;
    (any.*assign)(true);
    std::cout << boost::any_cast<bool>(any) << std::endl;
    return 0;
}
person Community    schedule 20.09.2013