Форум программистов, компьютерный форум CyberForum.ru

Почему перегруженные шаблоны функций должны возвращать один и тот же тип? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Не вызывается нужный конструктор базового класса http://www.cyberforum.ru/cpp-beginners/thread634211.html
Здравствуйте. Я пока в процессе изучения С++. Имеется следующая структура классов: Базовый: Person, расширяющие его: Student и Manager, и наследующий их обоих класс Employee - древо в виде ромба :) Вот собственно код: #include <iostream>
C++ Посчитать сумму четных элементов двумерного масива посчитать сумму четных элементов двухменого массива 10*10 расположенных под главной диагональю http://www.cyberforum.ru/cpp-beginners/thread634141.html
Разбор сложной строки с аргументами C++
Здравствуйте друзья! Мне кажеться я заблудился в этой жизни(( В мою длл через пайп поступает строка, а точнее комманда на чтение или запись памяти в этой строке нужно распознать аргументы указывающие на адресс ячейки памяти которую нужно прочитать/или записать, аргументы разделены знаком # 1 аргумент строки означает чтение или запись 2 аргумент адресс ячейки
Argc и Argv C++
Всем привет, у меня такой вопрос, как правильно вызвать данную функцию int test(int argc, char* argv){ } Я делала так, но компилятор выдает ошибки int main(int argc, char* argv){ for( i = 1; i<argc; i++) test(1, argv = "-n 1") } Что-то я неправильно делаю...
C++ Компилятор не видит заголовочные файлы http://www.cyberforum.ru/cpp-beginners/thread634108.html
>Quiet Snow<, вот тут все описано :) Как сделать, чтобы он инклюды видел? Взято отсюда
C++ не получаеться привязать dll к проге не получаеться привязать dll к проге case 1001: //загрузим форму из DLL HMODULE hMod = LoadLibrary(L"lpnwf.dll"); //BOOL myRegClass(HINSTANCE hInst, int cmdMode); BOOL (*myRegClass)(HINSTANCE, int); подробнее

Показать сообщение отдельно
Avazart
Нарушитель
6954 / 5192 / 256
Регистрация: 10.12.2010
Сообщений: 22,768
Записей в блоге: 17
07.08.2012, 14:55     Почему перегруженные шаблоны функций должны возвращать один и тот же тип?
Глава 12. Специализация и перегрузка (Джосаттис Шаблоны С++ )
12.2.1. Сигнатуры

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

1. Не полностью квалифицированное имя функции (или имя шаблона функции, из которого она сгенерирована).

2. Область видимости класса или пространства имен (и, если это имя имеет внутреннее связывание, единица трансляции), в котором объявлено имя.

3. Классификация функции как const, volatile или const volatile (если это функция-член с данным спецификатором).

4. Типы параметров функции (перед подстановкой параметров шаблона, если функция генерируется из шаблона функции).

5. Если функция генерируется из шаблона функции, то тип ее возвращаемого значения.

6. Параметры и аргументы шаблона, если функция генерируется из шаблона функции.

Это означает, что в одной и той же программе могут сосуществовать следующие шаблоны и их экземпляры:
C++
1
2
3
4
template<typename Tl,   typename T2> void  fl(Tl,   T2);
template<typename Tl,   typename T2> void  fl(T2,   Tl);
template<typename T> long  f2(T);
template<typename T> char  f2(T);
Однако их не всегда можно использовать, если они объявлены в одной области видимости, поскольку при их инстанцировании возникает неоднозначность перегрузки.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
template<typename Tl   ,   typename T2>
void fl(Tl,   T2)
{
std::cout  «   "fl(Tl,   T2)\n"; }
template<typename Tl, typename T2>
void fl(T2, Tl)
{
//Это определение отличается от того, которое дано в стандарте C++, однако следствия у них эк виваленты.
std::cout  «   "fl(T2,   Tl)\n";
}
// Пока все хорошо
int main ()
{
fl<char,char>('а',' bf'); // Ошибка: неоднозначность
}
 
Текущее время: 04:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru