Я пытаюсь создать concept
, который можно использовать для безопасной проверки того, что у функтора есть определенные критерии. Это мой код прямо сейчас:
template<typename T>
void fetch(T&& f)
{
fetch_helper(&f, &std::unwrap_ref_decay_t<T>::operator());
}
template<typename T, typename... Args>
void fetch_helper(T* obj, void (T::*f)(Args...) const)
{
// do stuff
}
Я использую fetch
, чтобы взять объект функтора, а затем использую fetch_helper
для его работы. Однако я хочу реализовать прив. concept
или type trait
, который проверял бы, что типы аргументов уникальны (у меня уже есть реализованная концепция для IsUnique<T...>
). Чтобы программа не компилировалась, если функтор не соответствует критериям.
// compiles
fetch([](int h){
});
// doesnt compile
fetch([](int h, int j){
});
Как я могу применить свой constrait IsUnique
к аргументам объекта функтора в fetch? Я попытался добавить концепцию requires
в свою вспомогательную функцию, но это все еще позволяет вызывать fetch с неверными аргументами. Мне как-то приходится применять ограничение аргументов в fetch.