170 похожих чатов

Есть такой вот код (MWE), который принимает указатель на метод

в качестве шаблонного параметра: https://godbolt.org/z/59n13P

Проблема в том, что некоторые типы (int, double, enum etc.) в принципе не могут иметь методов. Как следствие компилятор ругается на такой код, даже если add_method никогда не вызывается (—> шаблон не инстанциируется). Есть ли какой-то изящный способ это пофиксить? Можно конечно для типов с методами и типов без методов завести свой TypeInfoBuilder с/без add_method, потом их как-то отнаследовать чтобы не дублировать код, как-то решить проблему с возвращаемым типом билдера (через CRTP?)... Но все это выглядит дико громоздко. Есть ли какой-то более изящный способ? С enable_if или специализацией?

5 ответов

13 просмотров

Помимо enable_if есть if constexpr и концепты.

Oleksandr- Автор вопроса
magras
Помимо enable_if есть if constexpr и концепты.

К сожалению моя компания использует очень старый компилятор, который даже C++11 не полностью поддерживает, поэтому не вариант :) А можно пример как бы эта задача решалась на if constexpr или концептах?

Oleksandr
К сожалению моя компания использует очень старый к...

Кажется я не прав и достаточно простого static_assert, но это потребовало переноса member из nttp в аргументы функции. Мне не удалось придумать изящную реализацию оригинального интерфейса с использованием C++20. https://godbolt.org/z/7MEhj7

Oleksandr- Автор вопроса
magras
Кажется я не прав и достаточно простого static_ass...

К сожалению перенос метода в аргументы функции тоже не вариант по ряду причин, мне он нужен в compile-time контексте. Может в будущем это поменяется, но пока вот так. Тем временем я попробовал пофиксить проблему через CRTP: https://godbolt.org/z/WbEqT7 . Слегка громоздко, но на первое время пойдет.

Oleksandr- Автор вопроса

Спасибо, решение с C++11 выглядит неплохо!

Похожие вопросы

Обсуждают сегодня

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
И никого не интересует какие пакеты кто использует. ((% Заходишь на сайт симфони и видишь поддержку Украины - по законам РФ это ж экстремизм. Только никто не отказывается от с...
Am Ambrion
11
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Чтобы перехватить все нажимания буков на форме, надо хук ставить? Пробовал на форме ОнКейДаун, оно ловит клаву если фокус не на компоненте с вводом текста
Serjone
15
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
7
Народ! Впервые клиенту пришло письмо от РКН, у вас, дескать, есть яндекс метрика, а нигде не написано, что вы ее юзаете. Никто не сталкивался?
Sasha Beep
14
Всем привет! вывожу на общей стр дочерние ресурсыв каждом ресурсе галерея, и первая фотка должна выводиться на общей [!DocLister? &prepare=photo !]
Alekso
12
Я правильно понимаю что нет способов получить список ожидающих заявок на вступление в группу с помощью бота из mtproto?
Шамиль Прилов
7
А можно вопрос? Мне сегодня сказали что у меня функция (которая просто заполняет массив значениями) не правильная void Full(double * arr, int n) { for (int i = 0; i < n; i...
† C E †
7
Добрый вечер. Хочу чтобы у меня в классе поле было функцией, которая возвращает строку. Делаю так: interface ... TGetOutPath = function : String of object; ... protec...
Kirill Filippenok
12
Карта сайта