2016-10-24 3 views
-1

Когда выполните следующие действия в GCC 4.8.2,C++ TypeId на операторе-члена класса() перегружает

class A 
{ 
public: 
    void operator()(int); 
    void operator()(const std::string&) {} 
}; 

std::cout << typeid(&A::operator()).name() << std::endl; 

Это дает ошибку:

error: address of overloaded function with no contextual type information. 

Он работает для других операторов-членов класса, такие как оператор ==. Это синтаксическая ошибка в вызове typeid() для A :: operator()?

РЕДАКТИРОВАТЬ: извините, мой плохой. Проблема возникает, когда имеется несколько перегруженных операторов().

+1

Кажется [работа для меня] (http://rextester.com/PFM1036) –

+1

Не может воспроизвести с помощью GCC 6.2 –

+0

К сожалению, мой плохой. Отредактировал вопрос. Это происходит, когда имеется несколько перегруженных операторов(). – surfcode

ответ

2

Вы можете использовать static_cast, чтобы получить то, что хотите от перегрузок.

static_cast также может быть использована для устранения неоднозначности перегруженных функций, выполняя преобразование функции-к-указатель к определенному типу, как и в std::transform(s.begin(), s.end(), s.begin(), static_cast<int(*)(int)>(std::toupper));

например,

std::cout << typeid(static_cast<void(A::*)(int)>(&A::operator())).name() << std::endl; 

LIVE

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