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

Выбор шаблонного варианта для аргумента-массива - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ошибка "Недопустимый else без парного if" http://www.cyberforum.ru/cpp/thread1273030.html
#include <iostream> #include <stdio.h> using namespace std; // ВЫВОД МАТРИЦЫ НА ЭКРАН void print(int **Q, int x, int y) { int i, j; for (i = 0; i<x; i++)
C++ Unexpected() не вызывается Всем привет! Читаю бессмертный труд Страуструпа Язык программирования С++издания 2011 года (п.14.6 о спецификации исключений): Если во время своего выполнения она (функция со спецификацией исключений) попробует произвести действия, нарушающие объявленную гарантию, такая попытка приведет к вызову стандартной функции std::unexpected (). По умолчанию, функция std::unexpected() вызывает... http://www.cyberforum.ru/cpp/thread1273018.html
Разделить функцию на две C++
Выполнил контрольную. Все работает как надо. Но потом заметил, что пропустил в условии "минимум 2 функции". Помогите без потерь переместить кусок кода из 1 функции в другую. Желательно тот кусок, который "//вычисляю строку по убыванию и записываю ее номер". #include <stdio.h> int dop(int,int,int,int); #define nn 20 int main() { int mas,l,h,i,j,k,s;
C++ Найти среднее арифметическое массива
Для B найти среднее арифметическое подсказка: S2(вещественное)=sum(целое)/n 1) сделать sum вещ. 2) s2=1.+sum/n 3)s2=float(sum)/n
C++ Перевод из 6-ричной системы в десятичную http://www.cyberforum.ru/cpp/thread1272994.html
На вход программе подается строка символов, оканчивающаяся точкой, и состоящая из ненулевого количества неотрицательных целых чисел, записанных в 6-ричной системе счисления. Каждые 2 соседних числа разделены непустой последовательность пробелов и/или :. Каждое число состоит не более, чем из 5-ти разрядов, ведущие нули и знак + не используется. Общая длина строки, включая точку, не должна...
C++ Создание шахматного поля Добрый вечер. Я пытаюсь написать простую игру шахматы в ООП, с графикой. Начала с создание доски и описания классов: поле(field) и клетки черные и белые(cell). Я не очень понимаю как использовать графику. Хочу создать поле как массив клеток 8х8. Я попыталась описать классы, вот что получилось. Помогите, пожалуйста, дописать, чтобы строились клетки. Я понимаю, что это делается как-то через функции... подробнее

Показать сообщение отдельно
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6237 / 2966 / 289
Регистрация: 04.12.2011
Сообщений: 7,921
Записей в блоге: 3
11.10.2014, 18:16     Выбор шаблонного варианта для аргумента-массива
Цитата Сообщение от DrOffset Посмотреть сообщение
Дело в том, что изначально массив не указатель и требует array-to-pointer conversion при передаче, так что вариант с T & может подойти
Я прошу прощения, - шаблоны и разрешения перегрузки с неявными преобразованиями, это сложно для меня, но я не понимаю Почему имя массива может подойти там где объявлена ссылка на тип и ожидается то что приводится к T?
Имя массива не приводится.
Я поэкспериментировал, кое-что подсмотрел в:
http://rsdn.ru/forum/cpp/1957817.all
хотя подозревал, что-то подобное. Тут два несовместимых фрагмента, поэтому закомментировав код с шаблоном принимающим ссылку на массив ( вот тут действительно имя проходит ) придётся раскомментировать варианты со ссылкой на тип и указатель.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
using namespace std;
//это разрэмить
/*
template <typename T>
void foo(T& t){
cout << "&" << sizeof(t)<<endl;
}
template <typename T>
void foo(T* t){
cout << "*" << sizeof(t)<<endl;
}*/
 
//это зарэмить
template <typename T, size_t N>
void foo(T (&t)[N]) {
cout << "T (&t)[N]" << sizeof(t)<<endl;
}
 
int main()
{
    int a[] = {1,2,3};
    int (&c)[3] = a;//ссылка на массив
    int d = a[0]; //тип
//это разремить
/*
foo(a);//неявно a to &a[0] то есть к T*
foo(*a);//a to a[0] то есть к T и можно передать в T&
foo(c);//int (&c)[3] to &a[0] ! то есть снова к T*, ссылка на массив и ссылка на тип разные звери и преобразование к ссылке int& не будeт и тут
*/
//это зарэмить
foo(a);//массив по ссылке
cout <<  endl;
    system("pause");
    return 0;
}
Возможно я и близко не понял о чём речь.
 
Текущее время: 04:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru