Как сделать так, чтобы класс-оболочка<int> с преобразующим конструктором победил обертку<double> в разрешении перегрузкиC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как сделать так, чтобы класс-оболочка<int> с преобразующим конструктором победил обертку<double> в разрешении перегрузки

Сообщение Anonymous »


Я пытаюсь создать оболочку для обработки арифметических параметров с помощью специальной логики.

https://godbolt.org/z/zG959e5Pz

#include шаблон оболочка структуры { оболочка(const T& o): значение(o) {} значение Т; }; void func(wrapper a) { printf("int: %d\n", a.value); } интервал основной () { функция(1); // целое: 1 функция (1.0); // целое: 1 } Однако, когда я объявляю функцию перегрузки для func, я встречаю ошибку компиляции. Похоже, что компилятор не может выбрать конкретную перегруженную функцию.

#include шаблон оболочка структуры { оболочка(const T& o): значение(o) {} значение Т; }; void func(wrapper a) { printf("int: %d\n", a.value); } void func(wrapper a) { printf("double: %.2f\n", a.value); } интервал основной () { функция(1); // функция(1.1); } https://godbolt.org/z/YEo4c3E69

ошибка компилятора

: В функции 'int main()': :18:9: ошибка: вызов перегруженной функции func(int) неоднозначен 18 | функция(1); | ~~~~^~~ :9:6: примечание: кандидат: 'void func(wrapper)' 9 | void func(wrapper a) { | ^~~~ :13:6: примечание: кандидат: 'void func(wrapper)' 13 | void func(wrapper a) { | ^~~~ Как это исправить?
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

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

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