Насколько мне известно, невозможно проверить функцию-член шаблона без оценки каких-либо параметров шаблона.
Тем не менее, если у вас есть представление о том, какой может быть классификация входных данных - например, если функция может быть оценена только с помощью целочисленных значений или чего-то подобного - тогда вы можете протестировать это с явным экземпляром, который может быть «достаточно хорошим» для любых ваших целей:
template<typename U>
concept CREATOR=requires(U val) {
// Checks that 'val' has a 'fct' function template that works with integers
val.template fct<int>(5);
};
Живой пример
В большинстве случаев, однако, обычно более полезно определять концепцию вокруг полного атомарного определения, необходимого для выполнения ее контракта - в этот момент обычно лучше перенести эту оценку также на аргумент template
:
template <typename T, typename U>
concept fnc_evaluatable = requires(T val, U in) {
val.template fct<U>(in);
};
И затем использовать это в больших композициях.
На этом этапе состояние fnc
, являющегося шаблоном, также становится менее важным, чем его состояние с вызовом функции-члена fct
, вызываемой U
- и, вероятно, может быть упрощено до простого:
template <typename T, typename U>
concept fnc_evaluatable = requires(T val, U in) {
val.fct(in);
};
person
Human-Compiler
schedule
14.04.2021
fct
. Чтобы проверить его существование, вам нужно знать, как его вызвать или сколько параметров он принимает, и какого типа эти параметры. - person super   schedule 14.04.2021fct
(например, какой тип?) - person AndyG   schedule 14.04.2021T
), используя тот же подход, что и, например, в этом разделе вопросов и ответов. Ни один из ответов в связанных с дубликатами ответов не спрашивает об ограничении шаблонов функций-членов, и ответы не показывают, что вы можете (из-за несколько экзотического использования ключевого слова.template ...
). Я бы сказал, что темы связаны, а не обманывают. - person dfrib   schedule 14.04.2021T
. - person dfrib   schedule 14.04.2021T
, то это та же проблема. Проблема в том, что концепция должна знать, что существует параметр шаблона, и заполнять его, поэтому, если это может быть любой тип, концепция должна быть частью его параметров шаблона. - person Nicol Bolas   schedule 14.04.2021T
не использует нормативную формулировку и может быть простой формулировкой для без указания конкретных аргументов шаблона для параметра шаблонаT
. Но только OP знает, так что давайте посмотрим, сможет ли он вернуться и либо обновить вопрос (удалить дублирование?), Либо доволен целями обманки. - person dfrib   schedule 14.04.2021