Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
1 / 1 / 1
Регистрация: 30.03.2016
Сообщений: 29

Шаблоны в с++

26.03.2017, 22:15. Показов 3327. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Зачем при использовании шаблонов пишут, к примеру:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
template < typename T >
T Sum(T a, T b) {
    return a + b;
}
 
int main(int argc, char *argv[])
{
    setlocale(0, "");
 
    cout << Sum<int>(2, 2) << endl;
 
    system("pause");
    return 0;
}
какой смысл в "< >". Ведь можно писать и без них?

C++
1
2
3
4
5
6
7
8
9
int main(int argc, char *argv[])
{
    setlocale(0, "");
 
    cout << Sum(2, 2) << endl;
 
    system("pause");
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.03.2017, 22:15
Ответы с готовыми решениями:

Хранить шаблоны документов в базе и выводить данные в эти шаблоны
Доброго времени суток. Интересует вопрос: мне необходимо формировать вордовские документы по шаблону. У меня создан шаблон документа...

Чем отличаются шаблоны HTML и шаблоны WordPress
В чём различие между шаблонами HTML и WordPress. Кроме того, что создаются они разными способами. Конкретно имею в виду, почему их...

«Шаблоны шаблонов» vs «шаблоны с параметрами-шаблонами».
«Шаблоны шаблонов» vs «шаблоны с параметрами-шаблонами». Есть ли разница в этих понятиях? Если есть, то в чём? И где (в каких...

28
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
26.03.2017, 22:23
Цитата Сообщение от Алексаша Посмотреть сообщение
какой смысл в "< >". Ведь можно писать и без них?
можно делать вот такие глупости:
C++
1
cout << Sum<float>(2, 2) << endl;
0
331 / 283 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
26.03.2017, 23:10
Вот так попробуйте:
C++
1
Sum(2, 2.0)
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
26.03.2017, 23:31
Цитата Сообщение от DevAlone Посмотреть сообщение
Вот так попробуйте: Sum(2, 2.0)
попробовал.
полет нормальный:

http://rextester.com/TWEFAS16724

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
//-std=c++14 -fopenmp -O2 -g3 -pedantic -Wall -Weffc++ -Wextra 
//-Woverloaded-virtual -Wctor-dtor-privacy -Wnon-virtual-dtor 
//-Wold-style-cast -Wconversion -Wsign-conversion -Winit-self 
//-Wunreachable-code
 
 
template<class T1, class T2>
auto Sum(T1&& a, T2&& b)
{
    using re = typename std::common_type<T1,T2>::type;
    return static_cast<re>(a) + static_cast<re>(b);
}
 
int main()
{
    
    std::cout << "result = " << Sum(2, 2.0) << std::endl;
    
}
0
331 / 283 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
26.03.2017, 23:38
Цитата Сообщение от hoggy Посмотреть сообщение
попробовал.
полет нормальный:
Так возьмите код ТСа.
0
26.03.2017, 23:39

Не по теме:

hoggy, что за манеру вы взяли пихать ключи в демо-код?

0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
26.03.2017, 23:58
Цитата Сообщение от DevAlone Посмотреть сообщение
Так возьмите код ТСа.
его код не корректный.

а вопрос по существу:
так делать можно,
но не нужно.

если понадобилось,
значит шаблоно-код написанн
идеологически не верно.

Не по теме:


Цитата Сообщение от rikimaru2013 Посмотреть сообщение
что за манеру вы взяли пихать ключи в демо-код?
удобный кейс.
можно скопипастить ключики к себе в проект,
например.

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

так же и с проектами.
я не создаю проекты с нуля.
проще откопировать существующий,
и повыкидывать/добавить лишнее/необходимое,
чем все заново настраивать.

1
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
27.03.2017, 10:29
Цитата Сообщение от hoggy Посмотреть сообщение
если понадобилось,значит шаблоно-код написанн идеологически не верно.
Насколько я понял вы против явного указания типа шаблона при вызове функций. А что тут идеологически неверно?
На мой взгляд все очень даже корректно. Шаблон - достаточно абстрактная вещь и иногда может понадобится явно указывать тип.

Например, с помощью функции sum мы захотим суммировать два "тяжеловесных" объекта которые нужно передавать по ссылке в целях оптимизации.
А простые типы например как int, передавать по значению.
В этом случае явное указание параметра шаблона может очень даже пригодится

Например:
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
#include <iostream>
 
struct LargeObject
{
    int n;
    LargeObject operator + (const LargeObject& f)
    {
        n += f.n;
        return *this;
    }
};
 
template <typename T>
auto sum(T a, T b) {
    typename std::remove_reference<T>::type result;
    result = (a + b);
    return result;
}
 
int main()
{
    LargeObject l1, l2;
    l1.n = 500;
    l2.n = 600;
    std::cout << (sum<LargeObject&>(l1, l2)).n << '\n';
    std::cout << sum(5, 5) << std::endl;
}
http://rextester.com/CTN92740
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
27.03.2017, 10:34
Цитата Сообщение от Алексаша Посмотреть сообщение
какой смысл в "< >". Ведь можно писать и без них?
Чтобы явно указать используемый тип в шаблоне функции. Иначе компилятор попытается сам его вывести. В конкретно вашем примере тип можно не указывать.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
27.03.2017, 10:40
Цитата Сообщение от sys_beginner Посмотреть сообщение
А что тут идеологически неверно?
оно нафиг не нужно.
если понадобилось,
значит шаблон не выполняет свою задачу:
не обобщает.
не универсален.

Цитата Сообщение от sys_beginner Посмотреть сообщение
Например, с помощью функции sum мы захотим суммировать два "тяжеловесных" объекта которые нужно передавать по ссылке в целях оптимизации.
ваша функция sum - пример говнокода.


http://rextester.com/NMSH4515

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>
 
struct LargeObject
{
    int n;
    LargeObject operator + (const LargeObject& f)const
    {
        LargeObject obj(*this);
        obj.n += f.n;
        return obj;
    }
};
 
 
// аргументы не обязаны быть одного типа
// складывать можно любые
// лишь бы они умели друг с дружкой складываться
template <typename T1, typename T2>
// google: Идеальная передача и универсальные ссылки в C++
// [url]https://habrahabr.ru/post/242639/[/url]
auto sum(T1&& a, T2&& b) {
    return std::forward<T1>(a) + std::forward<T2>(b);
}
 
int main()
{
    LargeObject l1, l2;
    l1.n = 500;
    l2.n = 600;
    
    // передача по ссылкам
    std::cout << sum(l1, l2).n << '\n';
    
    // передача как rvalue
    std::cout << sum(5, 5) << std::endl;
}
1
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
27.03.2017, 10:46
Цитата Сообщение от sys_beginner Посмотреть сообщение
n += f.n;
А должен ли вызов оператора + менять данные текущего объекта?

Добавлено через 4 минуты
Цитата Сообщение от sys_beginner Посмотреть сообщение
Например, с помощью функции sum мы захотим суммировать два "тяжеловесных" объекта которые нужно передавать по ссылке в целях оптимизации.
А простые типы например как int, передавать по значению.
Имеет смысл написать шаблон функции sum чтобы он мог работать с любыми объектами эффективно. А для "тяжеловесных" объектов должно быть достаточно определённого оператора +.

Добавлено через 26 секунд
Ну в общем-то про это итак уже написали.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
27.03.2017, 10:46
Цитата Сообщение от MrGluck Посмотреть сообщение
А должен ли вызов оператора + менять данные текущего объекта?
очевидно жеж:
господин sys_beginner там слегка наделал уг.
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
27.03.2017, 10:50
Цитата Сообщение от hoggy Посмотреть сообщение
если понадобилось,
значит шаблон не выполняет свою задачу:
не обобщает.
не универсален
Как не выполняет? Вы утверждаете но не аргументируете. Когда указывается тип явно - обобщенность же не исчезает.
Просто она становится более вариативной.

Так называемые универсальные ссылки - это ссылки в любом случае rvalue или lvalue
Иногда может понадобится передавать именно копию а не ссылку
В таком случае ваш пример будет как вы сами сказали
не универсален.
Цитата Сообщение от MrGluck Посмотреть сообщение
А должен ли вызов оператора + менять данные текущего объекта?
Нет В торопях накосячил. Но суть мыслей думаю удалось передать

Добавлено через 1 минуту
Цитата Сообщение от MrGluck Посмотреть сообщение
Имеет смысл написать шаблон функции sum чтобы он мог работать с любыми объектами эффективно. А для "тяжеловесных" объектов должно быть достаточно определённого оператора +.
Это был пример идеи указывания типа явно. Это вполне себе может быть не sum а что то другое где перегрузкой плюсика не обойтись
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
27.03.2017, 10:56
Цитата Сообщение от sys_beginner Посмотреть сообщение
Как не выполняет? Вы утверждаете но не аргументируете
я вам даже код привел.
Цитата Сообщение от sys_beginner Посмотреть сообщение
Иногда может понадобится передавать именно копию а не ссылку
C++
1
2
3
//нужно передать копию?
some copy = origin; //<--- ну так сделайте её
foo(copy); // <--- и не парьте голову ни себе, ни людям
Добавлено через 2 минуты
Цитата Сообщение от sys_beginner Посмотреть сообщение
В таком случае ваш пример будет как вы сами сказали
на практике существует одна потребность - максимально эффективная передача аргументов.

а разруливать: вот здесь пусть аргументы идут по значению,
а вот здесь - по ссылке.
это - не универсальность.
это - лютый говнокод.
на практике случается чуть реже, чем никогда.
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
27.03.2017, 11:03
Цитата Сообщение от hoggy Посмотреть сообщение
и не парьте голову ни себе, ни людям
Я имел ввиду передать сразу копию. А не создать копию вне функции и передать её по ссылке
Вы когда передаете в функцию int по ссылке передаете?
Очевидно что нет

То что компилятор может сам определить тип - это вовсе не должно ущемлять возможность указывать тип явно.

Добавлено через 1 минуту
Цитата Сообщение от hoggy Посмотреть сообщение
это - не универсальность.
это - лютый говнокод.
Вы сами себе противоречите. Мой пример более универсальный и может то, чего не может ваш код.
И вы как сторонник универсальности почему то считаете более универсальную версию говнокодом

Добавлено через 2 минуты
Цитата Сообщение от sys_beginner Посмотреть сообщение
А не создать копию вне функции и передать её по ссылке
Кроме того, такой вариант более затратный. Ибо приходится:
1. Создать копию
2. Передать по ссылке

При прямой передачи копии достаточно создания одной копии.
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
27.03.2017, 11:10
Алексаша, Смотрите
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
 
 
template < typename T >
T Div(T a, T b) {
    return a/b;
}
 
int main(){   
 std::cout << Div(5, 2) << '\n'; 
}
И посмотрите оба вывода. Вот приблизительно для этого лучше явно указывать.

Добавлено через 1 минуту
Об этом уже сказано выше, но просто словами.
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
27.03.2017, 11:23
Цитата Сообщение от daslex Посмотреть сообщение
И посмотрите оба вывода.
Чего-то не хватает..

Добавлено через 1 минуту
Мб Div<double>(5, 2)?

Добавлено через 1 минуту
Указывать надо явно в случае неоднозначности. К примеру
C++
1
Div(5.0, 2)
Добавлено через 16 секунд
Указывать надо явно в случае неоднозначности. К примеру
C++
1
Div(5.0, 2)
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
27.03.2017, 11:23
Цитата Сообщение от sys_beginner Посмотреть сообщение
Я имел ввиду передать сразу копию
я прекрасно понял, что вы имели ввиду.
это - нафиг никому не нужно.
пользователи не хотят лазить в реализацию вашего говнокода и чесать репу,
думая: как бы мне теперь не профакапить ссылку,
оно жеж тогда по значению попрет!

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

Цитата Сообщение от sys_beginner Посмотреть сообщение
Вы когда передаете в функцию int по ссылке передаете?
зависит от ситуации.
если нужна ссылка - передаю ссылку.

и да, когда вы работаете с шаблонами, никаких интов не существует.
существуют "типы", ограничения на свойства которых определяются вашим шаблоном.

я ещё повторюсь: при программировании шаблонов,
программист мыслит категориями "некоторого типа T",
а не конкретными типами.

C++
1
2
3
4
5
6
7
8
void foo(const int); //<---- вот это int
 
template <class T, typename std::enable_if< std::is_intergal<T>::value >::type* = nullptr>
void foo(const T); //<---- а вот это любой интеграл
 
 
template <class T, typename std::enable_if< !std::is_intergal<T>::value >::type* = nullptr>
void foo(const T&); //<---- а вот это все остальное. кроме интегралов
Цитата Сообщение от sys_beginner Посмотреть сообщение
То что компилятор может сам определить тип - это вовсе не должно ущемлять возможность указывать тип явно.
вас никто и не ущемляет.
однако, если у вас возникла такая потребность,
значит вы пишите говнокод.

Цитата Сообщение от sys_beginner Посмотреть сообщение
Мой пример более универсальный и может то, чего не может ваш код.
1.
ваш более универсальный говнокод провоцирует ошибки.

2.
пользователь не должен париццо о том,
как именно ваша функция будет принимать объект.
он исходит из предположение максимальной эффективности.

3.
не должен сам постоянно указывать ссылочный тип при передаче крупных объектов.
это как минимум не удобно.
а писать ему это уг придется при таком подходе чуть реже, чем всегда.

4.
и о боже! не должен бояццо забыть прописать ссылочную семантику,
и профакапить ссылку.

5.
а факапить ссылку будут только так.
вы же сами профакапите.
потому что здравый смысл подсказывает:
явно указывать ссылочную семантику для шаблона - избыточно.




Цитата Сообщение от sys_beginner Посмотреть сообщение
Кроме того, такой вариант более затратный. Ибо приходится:
1. Создать копию
2. Передать по ссылке
При прямой передачи копии достаточно создания одной копии.
передача по ссылке затратно? вы это серьёзно?
1
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
27.03.2017, 11:47
Цитата Сообщение от hoggy Посмотреть сообщение
я прекрасно понял, что вы имели ввиду.
Но тем не менее ваш пример не соответствовал этому
Цитата Сообщение от hoggy Посмотреть сообщение
это - нафиг никому не нужно.
пользователи не хотят лазить в реализацию вашего говнокода и чесать репу,
думая: как бы мне теперь не профакапить ссылку,
оно жеж тогда по значению попрет!
Так в том и дело что лазить в реализацию не нужно. T - шаблонный аргумент и чем больше воли мы даем пользователю этого шаблона решать самому ссылка это или нет тем лучше и гибче. Наоборот в вашем случае пользователю нужно лезть в вашу "крутую реализацию" и постоянно помнить что аргументы это так называемые универсальные ссылки.
А когда просто T - это означает любой тип который туда может подставить компилятор и программист уже сам решает чего подставлять туда когда в этом есть необходимость.

Цитата Сообщение от hoggy Посмотреть сообщение
программист мыслит категориями "некоторого типа T",
Вот и я об этом говорю
Цитата Сообщение от hoggy Посмотреть сообщение
значит вы пишите говнокод.
Вам еще один пример с делением привели. Неужели недостаточно что бы признать что это не так?

Цитата Сообщение от hoggy Посмотреть сообщение
он исходит из предположение максимальной эффективности.
В том то и дело что передача простых типов как утверждают многие специалистов должна быть не по ссылке и что это мешает компилятору делать оптимизации.

Цитата Сообщение от hoggy Посмотреть сообщение
передача по ссылке затратно? вы это серьёзно?
На сколько мне известно при прямой передачи копии компилятор может сгенерировать код для создания этой копии в той области памяти куда кладется возвращаемое значение и оперировать изменениями сразу в той же области памяти. Для ссылок помоему такое поведение исключается

Добавлено через 12 минут
Цитата Сообщение от sys_beginner Посмотреть сообщение
Для ссылок помоему такое поведение исключается
Таким образом простые типы передавать методом копирования в функцию более выгодно
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
27.03.2017, 11:54
Цитата Сообщение от sys_beginner Посмотреть сообщение
Но тем не менее ваш пример не соответствовал этому
разумеется.
мой пример - пример грамотной реализации.
Цитата Сообщение от sys_beginner Посмотреть сообщение
Так в том и дело что лазить в реализацию не нужно. T - шаблонный аргумент и чем больше воли мы даем пользователю этого шаблона решать самому ссылка это или нет тем лучше и гибче.
гибкость ради гибкости не нужна.

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

Цитата Сообщение от sys_beginner Посмотреть сообщение
Вам еще один пример с делением привели. Неужели недостаточно что бы признать что это не так?
пример с делением - пример ущербного шаблона.
ещё раз:

C++
1
2
3
4
5
6
7
8
9
// аргументы не обязаны быть одного типа
// складывать можно любые
// лишь бы они умели друг с дружкой складываться
template <typename T1, typename T2>
// google: Идеальная передача и универсальные ссылки в C++
// [url]https://habrahabr.ru/post/242639/[/url]
auto sum(T1&& a, T2&& b) {
    return std::forward<T1>(a) + std::forward<T2>(b);
}
переделайте сложение на деление.
и получите:
1.
отсутствие неоднозначностей.
2.
делить можно будет любые типы, лишь бы они умели делиццо.
3.
результатом выражения будет их нативный std::common_type,
как и должно быть при честном делении.
4.
эффективную передачу аргументов.

Цитата Сообщение от sys_beginner Посмотреть сообщение
В том то и дело что передача простых типов как утверждают многие специалистов должна быть не по ссылке и что это мешает компилятору делать оптимизации.
1.
все это пропаганда гнилого запада херня.
копеечная микрооптимизация,
которая может иметь место быть для простых функций,
реализация которых торчит в соседней либе.
2.
шаблоно-код обладает важной особенностью:
он всегда полностью виден единице трансляции.
и поэтому волшебным образом inline во все поля отлично оптимизуется.

компилятор не просто оптимизирует саму ссылку,
но и вообще всю функцию,
или шаблоно-класс целиком.

Цитата Сообщение от sys_beginner Посмотреть сообщение
На сколько мне известно при прямой передачи копии компилятор может сгенерировать код для создания этой копии в той области памяти куда кладется возвращаемое значение и оперировать изменениями сразу в той же области памяти. Для ссылок помоему такое поведение исключается
не распарсил этот поток сознания.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.03.2017, 11:54
Помогаю со студенческими работами здесь

Шаблоны. Плохо понимаемые моменты из книги "Шаблоны С++. Справочник разработчика". (Вандевурд, Джосаттис)
Так как изучаю эту книгу, то в некоторых местах возникают вопросы. Чтобы не плодить много тем, корни у которых одни, решил создать эту...

Помогите писать на С++ через шаблоны. Консуле я писал, но надо писать исползуя шаблоны
В одномерном массиве, состоящем из п вещественных элементов, вычислить: 1) количество элементов массива, равных 0; 2) сумму элементов...

Шаблоны в C++
Доброго времени суток! Начал разбираться что такое шаблон и с чем его едят. Загуглил, вставил код из википедии. Ошибка. ...

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

шаблоны в си++
кто может сказать где прблема? List.h #ifndef LIST_H #define LIST_H #include&lt;iostream&gt; #include&lt;ostream&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru