Есть некоторый класс. У него перегружен оператор [], возвращающий один символ. Также есть метод, сериализующий класс в стоку, для записи на диск и передачи по сети.
Так как результат сереализации часто нужно передавать в API, решил упростить себе жизнь и перегрузить преобразование объекта к сроке. В итоге имеем такой заголовок (в my_library.h):
class my_class
{
public:
char operator[](const unsigned int pos) const;
const char * serialize() const;
operator const char * () const {return serialize()}; //новый метод
};
Но теперь перестал работать оператор[]
например в выражении вида
my_class var;
char a = var[0];
получаю ошибку:
main.cpp(68) : error C2666: 'my_class::operator []' : 2 overloads have similar conversions
my_library.h(21): could be 'char my_class::operator [](const unsigned int) const'
or 'built-in C++ operator[(const char *, int)'
while trying to match the argument list '(my_class, int)'
Я понимаю, что он (компилятор) пытается выполнить, но я не понимаю почему прямой вызов оператора и вызов с промежуточной конвертацией имеют одинаковый приоритет?
И как это можно исправить, не отказываясь от перегруженных операторов?
Примечание:
Печально это, что нельзя одновременно перегружать тайпкаст в указатель и поэлементный доступ :(
RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.
Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.
Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.