Неоднозначные вызовы конструкторов классовC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Неоднозначные вызовы конструкторов классов

Сообщение Anonymous »


В настоящее время я реализую собственный строковый класс, но столкнулся с некоторыми проблемами с конструкторами классов. Класс представляет собой специальную оболочку для std::string, поэтому в нем есть большинство конструкторов std::string, за исключением конструкторов итераторов, поскольку некоторые системы, в которых будет выполняться код, не поддерживают STL.

Класс также предоставляет некоторые конструкторы, основанные на реализации String в Arduino, в частности числовые переменные для строковых конструкторов, которые показаны ниже:

Конструкторы преобразования чисел:

// беззнаковое целое число string(const uint8_t Source, uint8_t Base = 10, bool LetterCase = CPString::NumberConversion::LetterCase::Mode); string(const uint16_t Source, uint8_t Base = 10, bool LetterCase = CPString::NumberConversion::LetterCase::Mode); string(const uint32_t Source, uint8_t Base = 10, bool LetterCase = CPString::NumberConversion::LetterCase::Mode); string(const uint64_t Source, uint8_t Base = 10, bool LetterCase = CPString::NumberConversion::LetterCase::Mode); // подписанное целое число string(const int8_t Source, uint8_t Base = 10, bool LetterCase = CPString::NumberConversion::LetterCase::Mode, bool IntFormat = CPString::NumberConversion::IntFormat::Mode); string(const int16_t Source, uint8_t Base = 10, bool LetterCase = CPString::NumberConversion::LetterCase::Mode, bool IntFormat = CPString::NumberConversion::IntFormat::Mode); string(const int32_t Source, uint8_t Base = 10, bool LetterCase = CPString::NumberConversion::LetterCase::Mode, bool IntFormat = CPString::NumberConversion::IntFormat::Mode); string(const int64_t Source, uint8_t Base = 10, bool LetterCase = CPString::NumberConversion::LetterCase::Mode, bool IntFormat = CPString::NumberConversion::IntFormat::Mode); // плавать явная строка (const float Source); строка (const float Source, точность uint8_t); Вкратце: база представляет собой систему счисления, которая будет использоваться для преобразования переменной, где 2 будет двоичным, 8 восьмеричным и 16 шестнадцатеричным, используемые системы счисления: [2,32]. LetterCase – это переменная, которая определяет, следует ли использовать буквы в верхнем или нижнем регистре.

Проблема в том, что этот набор конструкторов становится неоднозначным с одним из конструкторов std::string, в частности с конструктором fill (ниже определения):

string(unsigned int n, char c); При звонке:

CPString::string myString(10,'a'); Компилятор выдает ошибку C2666: перегруженные функции имеют аналогичное преобразование

Я предполагаю, что литерал char преобразуется в uint8_t, можно ли однозначно определить эти конструкторы? Я знаю, что изменение 10 на 10u устраняет двусмысленность вызова, но я хочу найти лучшее решение. При этом также будет принято значение 10 в качестве первого параметра конструктора заполнения.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»