С C ++ 20 и концепциями за углом я подумал, можно ли написать концепцию, чтобы проверить, есть ли у Type функция с определенным именем, которая принимает любое количество произвольных аргументов.
Возьмем, к примеру, следующий код (с текущим концептуальным синтаксисом TS GCC):
template <typename T>
concept bool Initializable = requires(T t) {
{ t.init() } ->void;
};
struct S {
void init() {}
};
static_assert(Initializable<S>);
Концепция Initializable проверяет, реализует ли Type функцию void init ().Теперь давайте предположим, что есть другой тип, который также имеет функцию init, но требует аргументов, например, int:
struct T {
void init(int) {}
};
Теперь в этом случае статическое утверждение не будет выполнено.
Есть ли способ заставить Инициализируемый концепт игнорировать аргументы функции?Этот пример может показаться довольно производным, но для чего-то вроде универсального сериализатора могут быть варианты использования для такой концепции.