Как указать (declval?) аргумент указателя функции для метода в блоке концепции «требуется»?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как указать (declval?) аргумент указателя функции для метода в блоке концепции «требуется»?

Сообщение Anonymous »

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

Код: Выделить всё

// One of several that will follow this pattern.
class Timer8 {
public:
//...
using overflow_context = OverflowIrqCtx; // a struct.
using overflow_handler = void(*)(overflow_context* ovf_ctx, void* usr_ctx);
void SetOverflowIrqEnabled(bool enabled);
void SetOverflowIrqHandler(void* usr_ctx, overflow_handler handler);
//...
};
Однако следующее не компилируется:

Код: Выделить всё

template
concept Timer = requires(T a) {
{ a.SetOverflowIrqEnabled(std::declval()) };
{ a.SetOverflowIrqHandler(std::declval(), std::declval()) };
};
Ошибка:

Код: Выделить всё

scheduler.h: In substitution of 'template  requires  Timer class embedded::Scheduler [with T = embedded::time::Timer8]':
scheduler_test.cc:20:45:   required from here
scheduler.h:16:9:   required for the satisfaction of 'Timer' [with T = embedded::time::Timer8]
scheduler.h:16:17:   in requirements with 'T a' [with T = embedded::time::Timer8]
scheduler.h:22:28: note: the required expression 'a.SetOverflowIrqHandler(std::declval(), declval())' is invalid, because
22 |   { a.SetOverflowIrqHandler(std::declval(), std::declval()) };
|     ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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

Подробнее здесь: https://stackoverflow.com/questions/793 ... -a-concept
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»