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

Объявить специализацию шаблона класса

24.09.2018, 22:54. Показов 938. Ответов 2

Студворк — интернет-сервис помощи студентам
Добрый вечер.
Есть код:
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
37
38
39
40
41
42
43
44
45
// Example program
#include <iostream>
#include <string>
 
constexpr uint8_t config[] = {
        4, 0, 0, 3,
        5, 0, 4, 0, 0, 0,0,0,0,
        7, 0, 5, 0, 0, 0,0,0,0,0,
        9, 0, 2, 0, 0, 0,0
};
 
template<const uint8_t *data, uint16_t size>
struct Pointers2
{
    using Callback = const uint8_t*(*)(uint16_t);
 
    static constexpr const uint8_t* _configuration(uint16_t index)
    {
        const uint8_t *result = data + 4;
        for(uint16_t i = 0; i < index; i++, result += 5 + result[2]);
 
        return result;
    }
    
    template<Callback, typename> struct Data;
    
    template<Callback handler, template<typename, const uint32_t...> class C, const uint32_t ...indexes>
    struct Data<handler, C<uint32_t, indexes...>>
    {
        static constexpr uint16_t SIZE = sizeof...(indexes);
        static constexpr uint8_t const *DATA[] = {handler(indexes)...};
    };
 
    using Configs = Data<&_configuration, tools::MakeIndexSequence<3>>;
};
 
template<const uint8_t *data, uint16_t size>
template<typename Pointers2<data, size>::Callback handler, template<typename, const uint32_t...> class C, const uint32_t ...indexes>
constexpr const uint8_t *Pointers2<data, size>::template Data<handler, C<uint32_t, indexes...>>::DATA[];
 
int main()
{
    using Qqq = Pointers2<config, sizeof(config)>;
    std::cout << static_cast<int>(Qqq::Configs::DATA[0][0]) << ' ' << static_cast<int>(Qqq::Configs::DATA[1][0]) << ' ' << static_cast<int>(Qqq::Configs::DATA[2][0]);
}
При сборке компилятор гонит это:
Code
1
2
3
4
5
6
7
34:69: error: wrong number of template arguments (1, should be 2) 
25:41: error: provided for 'template<const uint8_t* data, short unsigned int size> template<const uint8_t* (* <anonymous>)(uint16_t), class> struct Pointers2<data, size>::Data' 
39:103: error: template definition of non-template 'constexpr const uint8_t* const Pointers2<data, size>::Data<handler, C<unsigned int, indexes ...> >::DATA []' 
  In function 'int main()': 
44:40: error: 'Qqq<(const uint8_t*)&config, 30u>::Configs' has not been declared 
44:93: error: 'Qqq<(const uint8_t*)&config, 30u>::Configs' has not been declared 
44:146: error: 'Qqq<(const uint8_t*)&config, 30u>::Configs' has not been declared
Суть какая - нужно объявить специализацию структуры Data. Если убрать параметр Callbaсk из объявления, то компилируется нормально. Где ошибка, что ему не так?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.09.2018, 22:54
Ответы с готовыми решениями:

Не получается создать специализацию шаблона класса
Подскажите пожалуйста в чем ошибка. Я гуглил по кодам ошибок, но не смог понять в чем дело. Заголовочный файл: #ifndef ARRAY_H ...

Почему я не попадаю в специализацию шаблона?
Почему я не попадаю в специализацию шаблона? template&lt;&gt; box&amp; max(box&amp;, box&amp;); #include&lt;iostream&gt; struct box { ...

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

2
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
24.09.2018, 23:21
[progeR], а что это нечто должно делать?
0
30 / 21 / 8
Регистрация: 23.09.2018
Сообщений: 186
24.09.2018, 23:24
Цитата Сообщение от [progeR] Посмотреть сообщение
using Configs = Data<&_configuration, tools::MakeIndexSequence<3>>;
может тут что-то не так?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.09.2018, 23:24
Помогаю со студенческими работами здесь

Реализовать явную специализацию шаблона, принимающего ссылку на массив символов
Здравствуйте! Возникла небольшая проблема. Возникла нужда в явной специализации шаблона, принимающего ссылку на старый символьный...

Создать специализацию для шаблона, которая принимает массив указателей на строки и количество этих указателей
Нужно создать специализацию для шаблона, которая принимает массив указателей на строки и количество этих указателей. Эта специализация...

Определение метода-шаблона за пределами шаблона класса
День добрый! Разбираюсь в шаблонах, решил копнуть поглубже. Вот пример: template &lt;typename T1&gt; class K // шаблон класса { ...

Явное создание экземпляра класса и явная специализация шаблона класса
Всем добрый день! Не могу разобраться - эти две технологии дают один и тот же результат? В каких случаях применять одно и другое?...

Составить описание класса "3D вектор". Объявить объекты класса и продемонстрировать работу методов
Возникли сложности при решении задачи. Буду признателен тем, кто поможет. Задание: Составить описание класса. Объявить объекты класса...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru