Перегрузка функций с различным возвращаемым значением c ++ [duplicate]

Если ваш пользовательский скрипт загружен до того, как плагин jQuery будет загружен в браузер, тогда может возникнуть такая проблема. Таким образом, всегда сохраняйте свой собственный код JavaScript или jQuery после вызова плагина jQuery, поэтому решение для этого:

Сначала добавьте ссылку на файл jQuery, размещенный в GoogleApis, или локальный файл jQuery, который вы будете загружать из http://jquery.com/download/ и хост на вашем сервере:


или любой плагин для jQuery. Затем добавьте ссылку на свой файл сценария или код:


62
задан Shoe 5 March 2012 в 17:04
поделиться

8 ответов

Нет, нет. Вы не можете перегружать методы на основе типа возврата.

Разрешение перегрузки учитывает подпись функции. Функциональная подпись состоит из:

  • имя функции
  • cv-qualifiers
  • типы параметров

И вот цитата:

1.3.11 signature

информация о функции, которая участвует в разрешении перегрузки (13.3): ее список параметров-параметров (8.3.5 ) и, если функция является членом класса, cv-квалификаторы (если есть) для самой функции и класса, в котором объявлена ​​функция-член. [...]

Опции:

1) изменить имя метода:

class My {
public:
    int getInt(int);
    char getChar(int);
};

2) параметр out:

class My {
public:
    void get(int, int&);
    void get(int, char&);
}

3) шаблоны ... overkill в этом случае.

81
ответ дан Luchian Grigore 3 September 2018 в 13:21
поделиться

вы не можете перегрузить функцию, основанную на возвращаемом типе функции. вы можете преодолеть на основе типа и количества аргументов, которые выполняет эта функция.

0
ответ дан AlexDan 3 September 2018 в 13:21
поделиться

Хотя большинство других комментариев по этой проблеме являются технически правильными, вы можете эффективно перегрузить возвращаемое значение, если вы объедините его с перегрузкой входного параметра. Например:

class My {
public:
    int  get(int);
    char get(unsigned int);
};

DEMO:

#include <stdio.h>

class My {
public:
    int  get(         int x) { return 'I';  };
    char get(unsinged int x) { return 'C';  };
};

int main() {

    int i;
    My test;

    printf( "%c\n", test.get(               i) );
    printf( "%c\n", test.get((unsigned int) i) );
}

В результате получается следующее:

I 
C
0
ответ дан codechimp 3 September 2018 в 13:21
поделиться

Вы можете так думать:

У вас есть:

  int get(int);
  char get(int);

И не обязательно собирать возвращаемое значение функции во время вызова.

Теперь вы вызываете

  get(10);  -> there is an ambiguity here which function to invoke. 

Итак, нет смысла, если перегрузка разрешена на основе типа возврата.

3
ответ дан Cole Johnson 3 September 2018 в 13:21
поделиться

Вы не можете перегружать методы, основанные на типах возврата. Лучше всего создать две функции с немного отличающимся синтаксисом, например, во втором фрагменте кода.

2
ответ дан Frecklefoot 3 September 2018 в 13:21
поделиться

Возможно, но я не уверен, что это метод, который я бы рекомендовал начинающим. Как и в других случаях, когда вы хотите, чтобы выбор функций зависел от того, как используется возвращаемое значение, вы используете прокси; сначала определите такие функции, как getChar и getInt, затем общий get(), который возвращает прокси, например:

class Proxy
{
    My const* myOwner;
public:
    Proxy( My const* owner ) : myOwner( owner ) {}
    operator int() const
    {
        return myOwner->getInt();
    }
    operator char() const
    {
        return myOwner->getChar();
    }
};

Расширяет его до такого количества типов, которое вам нужно.

65
ответ дан James Kanze 3 September 2018 в 13:21
поделиться

Нет, вы не можете перегружать по типу возврата; только по типам параметров, а также с константными / летучими квалификаторами.

. Один вариант - «вернуть» с помощью ссылочного аргумента:

void get(int, int&);
void get(int, char&);

, хотя я бы, вероятно, использовал шаблон, или иначе названные функции, как ваш второй пример.

7
ответ дан Mike Seymour 3 September 2018 в 13:21
поделиться

Невозможно перегрузить тип возврата в C ++. Без использования шаблонов использование get_int и get_char будет лучшим, что вы можете сделать.

2
ответ дан sepp2k 3 September 2018 в 13:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: