1 / 1 / 2
Регистрация: 03.10.2021
Сообщений: 138
1

Как сделать функцию в шаблонном классе активной только если T будет определённым классом?

09.06.2023, 13:30. Показов 595. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть шаблонный класс-контейнер, в нём должны храниться объекты (причём по значению).
В нём есть несколько функций сортировок этих объектов по разным их характеристикам. Как сделать так, чтобы функцию sort_by_name можно было использовать только если в контейнере хранятся объекты, у которых вообще есть поле name?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.06.2023, 13:30
Ответы с готовыми решениями:

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

Сделать кнопку "Log in" активной, только если в поля username и password введены строки не меньше 6
На странице есть верстка: <form> <input type="text" name="username" /> <input...

Как сделать вкладку активной, если разные маршруты?
Всем привет!) Есть такая верстка <div class="tabbable"> <ul class="nav nav-tabs...

Как сделать кнопку активной только при определенных условиях
Добрый день. Есть форма на которой 3 текстбокса и одна кнопка. Я делаю ее Enabled = False. Как...

Как использовать механизм сигналов и слотов в шаблонном классе?
Насколько я знаю, в qt невозможно использовать сигналы и слоты в реализации шаблонных классов, но...

3
фрилансер
5860 / 5399 / 1105
Регистрация: 11.10.2019
Сообщений: 14,418
09.06.2023, 14:20 2
Слава57, если метод использует поле T::name, а этого поля там нет, будет ошибка компиляции. То есть, ничего специального делать и не нужно при этом
0
1 / 1 / 2
Регистрация: 03.10.2021
Сообщений: 138
09.06.2023, 14:52  [ТС] 3
В этом и вопрос, как бы сделать так, чтобы ошибки при компиляции не было? Мне в контейнеры нужно засовывать разные типы и не все поля у них совпадают, само собой. Разумеется, под каждый отдельный тип свой контейнер.
0
фрилансер
5860 / 5399 / 1105
Регистрация: 11.10.2019
Сообщений: 14,418
09.06.2023, 15:10 4
Лучший ответ Сообщение было отмечено Слава57 как решение

Решение

Слава57, если метод шаблона не вызывается, то он и не будет инстанцирован. И ошибки не будет. То есть, для типа, не содержащего поле name не будет возможности вызвать метод func_name
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
#include <iostream>
#include <string>
 
template<typename T>
struct CONT
{
    T t{};
    
    void func_no_name()
    {
        std::cout<<"func_no_name()"<<'\n';
    }
    
    void func_name()
    {
        std::cout<<"func_name(), name="<<t.name<<'\n';
    }
};
 
int main()
{
    struct A
    {
        
    };
    
    struct B
    {
        std::string name="BBB";
    };
    
    CONT<A>{}.func_no_name();
    //CONT<A>{}.func_name();  //error
    
    CONT<B>{}.func_name();
    CONT<B>{}.func_no_name();
}
0
09.06.2023, 15:10
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.06.2023, 15:10
Помогаю со студенческими работами здесь

Итераторы, как параметры лябда-функций в шаблонном классе
Доброго здоровья! Есть такой код (упрощенный вариант для наглядного описания ситуации): ...

Как сделать не активной Кнопку.Формы, если в самой Форме записи отсутствуют
Здравствуйте, подскажите пожалуйста как настроить кнопки Открытия_Форм не активными, при условии...

Как задать разный код разным типам в шаблонном классе?
Есть шаблонный класс, в котором объявлен массив. Как сделать, чтобы при любом числовом значении...

Inno Setup Как сделать радио кнопку Radiobutton не активной или активной
Всем привет, подскажите кто знает, как сделать радио кнопку в зависимости от условия активной или...

Как сделать так ,чтобы этот МАКРОС работал на всех листах книги, а не только на активной
Добрый вечер друзья. Пожалуйста, подскажите, как сделать, чтобы этот макрос работал на всех листах...

Как сделать принятие классом протокола только при определенных условиях?
Доброго, всем, времени суток. В iOS 8 был &quot;деприкейтед&quot; UIAlertView. Вместо него теперь...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

Новые блоги и статьи
Какой локальный веб-сервер выбрать
InfoMaster 19.01.2025
В современной веб-разработке локальные веб-серверы играют ключевую роль, предоставляя разработчикам надежную среду для создания, тестирования и отладки веб-приложений без необходимости использования. . .
Почему планшеты и iPad уже не так популярны, как раньше
InfoMaster 19.01.2025
Эра революционных инноваций История планшетных компьютеров началась задолго до того, как эти устройства стали привычными спутниками нашей повседневной жизни. В начале 1990-х годов появились первые. . .
Как самому прошить BIOS ноутбука
InfoMaster 19.01.2025
BIOS (Basic Input/ Output System) представляет собой важнейший компонент любого компьютера или ноутбука, который обеспечивает базовое взаимодействие между аппаратным и программным обеспечением. . .
Какой Linux выбрать для домашнего компьютера
InfoMaster 19.01.2025
Современные реалии выбора операционной системы В современном мире выбор операционной системы для домашнего компьютера становится все более важным решением, которое может существенно повлиять на. . .
Как объединить два словаря одним выражением в Python
InfoMaster 19.01.2025
В мире программирования на Python работа со словарями является неотъемлемой частью разработки. Словари представляют собой мощный инструмент для хранения и обработки данных в формате "ключ-значение". . . .
Как без исключения проверить существование файла в Python
InfoMaster 19.01.2025
При разработке программного обеспечения на Python часто возникает необходимость проверить существование файла перед выполнением операций с ним. Это критически важная задача, которая помогает избежать. . .
Как определить, содержит ли строка подстроку в JavaScript
InfoMaster 19.01.2025
При разработке веб-приложений часто возникает необходимость выполнять различные операции со строками, среди которых особое место занимает поиск подстрок. JavaScript предоставляет несколько встроенных. . .
Что такое метаклассы в Python
InfoMaster 19.01.2025
Метаклассы в Python представляют собой один из самых мощных и одновременно сложных механизмов языка, позволяющий программистам контролировать процесс создания классов. По своей сути, метакласс. . .
Как удалить свойство из объекта JavaScript
InfoMaster 19.01.2025
В современной веб-разработке объекты JavaScript играют фундаментальную роль в организации и структурировании данных. Они представляют собой контейнеры, которые хранят связанные данные и. . .
Какая разница между String и string в C#
InfoMaster 19.01.2025
В языке программирования C# существует интересная особенность: для работы со строками можно использовать как String, так и string. Эта двойственность часто вызывает вопросы у разработчиков, особенно. . .
Как в Git откатить репозиторий к предыдущему коммиту
InfoMaster 19.01.2025
В современной разработке программного обеспечения система контроля версий Git стала неотъемлемой частью рабочего процесса, предоставляя разработчикам мощные инструменты для управления изменениями в. . .
Как работают замыкания (closure) в JavaScript
InfoMaster 19.01.2025
В мире современной веб-разработки замыкания (closures) представляют собой один из фундаментальных концептов языка JavaScript, который часто вызывает затруднения у начинающих разработчиков, но при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru