Описание тега overload-resolution

Overload resolution is a language mechanism to select among several viable function overloads. Its rules are intricate and often surprising, even for experienced users.
2 ответа

Вызовите перегруженный метод сторонней сборки из универсального метода, используя динамический (или другими способами)?

Обновление: оказалось, что были детали, которые я полностью пропустил, пока я не посмотрел на исходный код библиотеки, которую я использовал. Извиняюсь за плохой пример кода, пытаясь сосредоточиться на том, что я считаю уместным. Работа с библиотеко…
27 июл '15 в 20:34
1 ответ

Разрешение перегрузки шаблона функции с двумя пакетами параметров

Рассмотрим следующий код: #include<iostream> template<class..., class... T> int f(T...) { return 1; } template<class... T> int f(T...) { return 2; } int main() { std::cout << f(1); } Компилирует и печатает 1 на gcc 8.2, но не…
3 ответа

Почему мы не находим правильную перегрузку оператора при использовании макроса?

Я пишу шаблон класса, который принимает произвольный указатель на функцию в качестве аргумента нетипичного шаблона. Я хотел бы использовать template <auto F> struct Foo; но мой компилятор (MSVC 2017.5) не поддерживает auto в списке параметров …
2 ответа

Разрешение перегрузки и пользовательское преобразование

Рассмотрим простой код: struct A; struct B { B(){} B(A const&){ } }; struct A { operator int() const {return 0;}; }; void func(B){} void func(char){} int main() { func(A()); //ambiguous call oO } Прежде всего, я не уверен, правильно ли я все пон…
28 дек '15 в 08:42
2 ответа

Аномалия перегрузки функции Scala

В Scala, почему эта перегрузка была разрешена? class log { def LogInfo(m: String, properties: Map[String, String]): Unit = { println(m) } def LogInfo(m: String, properties: Map[String, String], c: UUID = null): Unit = { println(m + c.toString()) } }…
4 ответа

Почему перегрузка конструктора разрешается неправильно?

Это мой (раздетый) класс и реализация одного объекта: template <typename T, typename Allocator = std::allocator<T> > class Carray { typedef typename Allocator::size_type size_type; // ... explicit Carray(size_type n, const T& value, …
18 май '11 в 20:10
2 ответа

Может компилятор сказать мне, какую перегруженную или шаблонную функцию он выбрал?

В частности, используя g++ в linux, есть ли способ определить, какая перегруженная или шаблонная функция была выбрана для конкретного оператора? Более конкретно, я не предполагаю, что я обязательно знаю все возможные варианты, которые могут быть в з…
3 ответа

Перегрузка с помощью "const" в конце объявления функции

У меня есть 3 попытки перегрузить функцию "begin()" class Test { public: //case 1: compiler error int begin(); const int begin(); //case 2:compiler warning: type qualifiers ignored on function return type int begin(); const int begin() const; //case…
20 авг '15 в 16:57
2 ответа

Вызов более конкретной перегруженной функции из ссылки на базовый класс

Прежде всего, извините за загадочный заголовок, это нелегко объяснить. Я хочу реализовать шаблон Visitor в C++, используя перегруженные функции. Это моя ситуация: У меня есть коллекция парсеров. Каждый синтаксический анализатор возвращает определенн…
1 ответ

Частичное упорядочение шаблонов функций, содержащих пакеты параметров шаблона

Частичное упорядочение шаблонов функций, содержащих пакеты параметров шаблона, не зависит от количества выводимых аргументов для этих пакетов параметров шаблона. template<class...> struct Tuple { }; template< class... Types> void g(Tuple…
29 окт '15 в 22:53
1 ответ

Разрешение перегрузки функции с nullptr в качестве аргумента

Рассмотрим код ниже. Хотя обе перегрузки fun принимать указатели, проходя мимо nullptr в fun не приводит к ошибке компиляции. Принимая во внимание, что очень похожая функция bun не может скомпилировать. Когда я печатаю типы аргумента i с помощью typ…
4 ответа

Как устранить неоднозначность вызова перегруженной функции с литералом 0 и указателем

Я почти уверен, что это, должно быть, уже было здесь, но я не нашел много информации о том, как решить эту проблему (без использования вызова): Учитывая две перегрузки, я хочу, чтобы вызов с функцией с литералом 0 всегда вызывал версию unsigned int:…
2 ответа

Почему сужение не влияет на разрешение перегрузки?

Учтите следующее: struct A { A(float ) { } A(int ) { } }; int main() { A{1.1}; // error: ambiguous } Это не скомпилируется с ошибкой о неоднозначной перегрузке A::A, Оба кандидата считаются жизнеспособными, потому что требование просто: Во-вторых, д…
30 июл '15 в 17:19
2 ответа

F# и члены, реализованные в интерфейсе

У меня досадная ошибка. type Animal = abstract member Name : string type Dog (name : string) = interface Animal with member this.Name : string = name let pluto = new Dog("Pluto") let name = pluto.Name Последняя строка, а именно "Имя", генерирует оши…
3 ответа

Как вывести кандидатов в функции разрешения перегрузки?

Как я могу сбросить функции-кандидаты (или жизнеспособные функции или лучшие жизнеспособные функции) для вызова функции? Я знаю, что g++ предоставляет возможность сбросить иерархию классов. (На самом деле, Visual Studio 2010 предоставляет аналогичну…
20 сен '10 в 10:49
2 ответа

Разрешение не виртуального метода - почему это происходит

Мое понимание (в C#) того, как разрешаются не виртуальные методы, заключается в том, что это зависит от типа переменной (а не от типа экземпляра). Посмотрите на код ниже. class Program { static void Main(string[] args) { Sedan vehicle = new Sedan();…
15 дек '12 в 20:08
1 ответ

Ищите код Java, реализующий алгоритм разрешения перегрузки javac

Предположим, у меня есть массив Objectс (в частности, Object[]) и массив объектов конструктора. Кто-нибудь может отослать меня к какому-нибудь Java-коду, который может просматривать объекты Constructor и выбирать тот, который является наиболее конкр…
15 дек '11 в 21:30
1 ответ

Не соответствует правильная перегрузка в C#

У меня есть следующая программа using System; using System.Collections.Generic; using System.IO; using System.Linq; class Program { public static string Foo<T>(params T[] items) { return "A"; } public static string Foo<T>(IEnumerable<…
2 ответа

Неоднозначное множественное наследование шаблонных классов

У меня есть реальная ситуация, которую можно обобщить в следующем примере: template< typename ListenerType > struct Notifier { void add_listener( ListenerType& ){} }; struct TimeListener{ }; struct SpaceListener{ }; struct A : public Notif…
5 ответов

Зачем добавлять метод добавить неоднозначный вызов, если он не будет связан с неоднозначностью

У меня есть этот класс public class Overloaded { public void ComplexOverloadResolution(params string[] something) { Console.WriteLine("Normal Winner"); } public void ComplexOverloadResolution<M>(M something) { Console.WriteLine("Confused"); } …
29 дек '11 в 23:03