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

Как записать шаблонный конструктор со сверткой так, чтобы все работало

17.10.2021, 19:15. Показов 844. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Начинаю учить STL по Галовицу Яцеку и встретил пример связанный со сверткой. Когда я ввел этот пример и попытался его скомпилировать, то произошла ошибка компиляции . Попытался найти ответ связанный с этим примером в интернете и ничего...

Скажите, пожалуйста, что не так я сделал...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
using namespace std;
 
template<typename T>
struct sum
{
    T value;
    template<typename...Ts>
    explicit sum<common_type_t<Ts...>>: value{(values + ...)} 
    {} 
};
 
int main()
{
    sum s {1,2,3,4,5};
 
    cout << s.value<<endl;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.10.2021, 19:15
Ответы с готовыми решениями:

Как записать, чтобы работало?
Почему нельзя вот так писать? Как переделать что бы работало? uses crt; const a:array of string = ( ('Создать...

Как под эту программу сделать так , чтобы работало дифференцирование и интегрирование многочленов
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; class Mnogochlen { int *A, n; public: ...

Как сделать так чтобы в файл можно было записать все числа кроме нуля?
Как сделать так чтобы в файл можно было записать все числа кроме нуля ? Добавлено через 1 минуту допустим я пишу 02 он мне в файл...

10
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
17.10.2021, 19:28
Цитата Сообщение от kazhroan Посмотреть сообщение
что не так я сделал...
ты написал какой то бред.

возможно, ты хотел получить что-то вроде:

https://rextester.com/HRAUQ77009

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
using namespace std;
template<typename T> struct sum
{
    T value;
    template<typename... Args>
    explicit sum(Args&& ...args)
        : value { (std::forward<Args>(args) + ...) } 
    {} 
};
 
int main()
{
    sum<int> s {1,2,3,4,5};
    cout << s.value << endl;
}
0
0 / 0 / 0
Регистрация: 17.10.2021
Сообщений: 22
18.10.2021, 08:02  [ТС]
Ну, с бредом согласен, но в книге говорится, что в стандарте С++17 можно неявно тип шаблона задавать, что я и пытался сделать.
Может быть я неправильно понял строку sum(Ts&&...values)->sum<common_type_t<Ts...>>
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
18.10.2021, 08:15
Цитата Сообщение от kazhroan Посмотреть сообщение
можно неявно тип шаблона задавать
для этого он должен выводится из аргумента:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
 
template<class T> struct sample
{
    sample(const T& v): value(v) {}
    T value;
};
 
int main()
{
    sample obj{1};
    std::cout << obj.value << '\n';
}
здесь аргумент 1 денотирует const T& v как const int& v,
соответственно, компилятор поймет, что T это - int
0
0 / 0 / 0
Регистрация: 17.10.2021
Сообщений: 22
18.10.2021, 08:30  [ТС]
Но при передаче больше количества аргументов с разными типами нужно, чтобы все свелось к одному, где и используется, как я понимаю, common_type_t. Поэтому в книге и сделали конструктор шаюлонным с переменным количеством параметров. Мне бы понять, как это правильно записать выражение в вопросе так, чтоб можно было написать sum s(1, 1.0, 2.0, 5) и компилятор вывел тип int
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
18.10.2021, 08:48
Цитата Сообщение от kazhroan Посмотреть сообщение
Мне бы понять, как это правильно записать
тебе нужно понять, что компилятор не телепат.
что бы он смог вывести тип шаблона из аргумента,
тебе нужно указать связь между этим самым аргументом и параметром шаблона.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
using namespace std;
 
template<typename T> struct sum
{
    T value;
    template<typename...Ts> explicit sum(T a, Ts&&... values)
        : value { a + (values + ...) }
    {} 
};
 
int main()
{
    sum s { 1,2,3,4,5 };
    cout << s.value<<endl;
}
0
0 / 0 / 0
Регистрация: 17.10.2021
Сообщений: 22
18.10.2021, 08:57  [ТС]
Хорошо, буду иметь ввиду. Я просто хотел понять, что не так я указал в примере из книги.
Спасибо большое за терпение и помощь!
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
18.10.2021, 09:02
Цитата Сообщение от kazhroan Посмотреть сообщение
что не так я указал в примере из книги
все не так.

вот так делать нельзя:
C++
1
2
3
4
5
6
7
8
#include <iostream>
 
template<class T> struct some
{
    some<float>() {} // <-- нельзя таким образом специализировать конструктор
};
 
int main() {}

а кроме того, в след. фрагменте:
Цитата Сообщение от kazhroan Посмотреть сообщение
explicit sum<common_type_t<Ts...>>: value{(values + ...)}
что такое values ?
это не аргумент, не параметр, оно вообще откуда взялось?

тебе нужно подучить общий синтаксис объявления функций,
а затем - конструкторов.
0
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
18.10.2021, 23:53
Цитата Сообщение от kazhroan Посмотреть сообщение
в книге говорится, что в стандарте С++17 можно неявно тип шаблона задавать, что я и пытался сделать.
Цитата Сообщение от kazhroan Посмотреть сообщение
C++
1
sum(Ts&&...values)->sum<common_type_t<Ts...>>
Там случайно не про вывод параметров шаблона класса писалось? Очень похоже на определение user-defined deduction guide.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12944 / 6811 / 1821
Регистрация: 18.10.2014
Сообщений: 17,235
19.10.2021, 00:06
Цитата Сообщение от kazhroan Посмотреть сообщение
Может быть я неправильно понял строку sum(Ts&&...values)->sum<common_type_t<Ts...>>
Так а где такая строка в вашем коде? В коде очевидно был deduction guide, вы его зачем-то выкинули и теперь удивляетесь, что код не компилируется. Зачем вы выкинули deduction guide?
0
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
19.10.2021, 00:07
Если да, то deduction guide надо определить отдельно (а не насиловть конструктор); примерно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
using namespace std;
 
template<typename T>
struct sum
{
    T value;
    template<typename...Ts>
    explicit sum(Ts ...values): value{(values + ...)} 
    {} 
};
 
template<typename ...Ts>
sum(Ts ...) -> sum<common_type_t<Ts...>>;
 
int main()
{
    sum s {1,2,3,4,5};
 
    cout << s.value<<endl;
}
http://coliru.stacked-crooked.... adf5e6e9d7
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.10.2021, 00:07
Помогаю со студенческими работами здесь

Как настроить прокси-сервер, чтобы всё работало
Здравствуйте! Впервые возникла потребность в прокси-сервере, но я оказался не готов %-) В общем, я почитал немного о том, о сём в...

Как правильно вписать условие в функцию чтобы все работало?
В это условие... /* === Поиск === */ function search(){ $search = clear($_GET); $result_search = array(); // результат...

Шаблонный класс (конструктор по умолчанию, основной конструктор и конструктор копирования; перегрузить операторные функции)
5.1. Разработать шаблонный класс Set. Класс должен содержать конструктор по умолчанию, основной конструктор и конструктор копирования....

Что нужно добавить в конфигурации, чтобы все работало как необходимо?
Что нужно добавить в конфигурации, чтобы все работало как необходимо? Конфигурацию и скрины прилагаю. Необходимо чтобы: -...

народ, объясните юзеру как исправить свое творение, чтобы все работало адекватно
программа переделывает *.mrk в *.txt файл с удалением не нужных столбцов.. в программе 3 формы : главная Form1, выбор действия YESNO ,...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru