Сообщение Re[5]: Вывод типа шаблонного параметра функции от 19.03.2020 10:17
Изменено 19.03.2020 10:17 andyp
Re[5]: Вывод типа шаблонного параметра функции
Здравствуйте, sergii.p, Вы писали:
SP>так ему надо передать принимаемые типы (а у нас их нет). Просто сказать ему, что нужен абы какой оператор(), который возвращает bool, не получиться.
есть идея использовать class template argument deduction для std::function как-то так
Но что-то не работает. Где-то косячу
SP>так ему надо передать принимаемые типы (а у нас их нет). Просто сказать ему, что нужен абы какой оператор(), который возвращает bool, не получиться.
есть идея использовать class template argument deduction для std::function как-то так
#include <iostream>
#include <type_traits>
#include <functional>
template<typename Pred>
using ret_ftn_type = typename decltype(std::function{std::declval<Pred>()})::result_type;
template<typename Pred>
bool is_bool_ret_v = std::is_same_v<ret_ftn_type<Pred>, bool>;
template<typename Pred, typename Enabler = void>
struct is_predicate : std::false_type {};
template<typename Pred>
struct is_predicate<Pred, typename std::enable_if_t<is_bool_ret_v<Pred>>> : std::true_type {};
auto predicate = [](int v){return true;};
auto not_a_predicate = [](int v){return 10;};
int main()
{
ret_ftn_type<decltype(predicate)> s(1.0);
std::cout << (int)(is_predicate<decltype(predicate)>::value) << std::endl;
std::cout << (int)(is_predicate<decltype(not_a_predicate)>::value) << std::endl;
}Но что-то не работает. Где-то косячу
Re[5]: Вывод типа шаблонного параметра функции
Здравствуйте, sergii.p, Вы писали:
SP>так ему надо передать принимаемые типы (а у нас их нет). Просто сказать ему, что нужен абы какой оператор(), который возвращает bool, не получиться.
есть идея использовать class template argument deduction для std::function как-то так
Но что-то не работает. Где-то косячу
SP>так ему надо передать принимаемые типы (а у нас их нет). Просто сказать ему, что нужен абы какой оператор(), который возвращает bool, не получиться.
есть идея использовать class template argument deduction для std::function как-то так
#include <iostream>
#include <type_traits>
#include <functional>
template<typename Pred>
using ret_ftn_type = typename decltype(std::function{std::declval<Pred>()})::result_type;
template<typename Pred>
bool is_bool_ret_v = std::is_same_v<ret_ftn_type<Pred>, bool>;
template<typename Pred, typename Enabler = void>
struct is_predicate : std::false_type {};
template<typename Pred>
struct is_predicate<Pred, typename std::enable_if_t<is_bool_ret_v<Pred>>> : std::true_type {};
auto predicate = [](int v){return true;};
auto not_a_predicate = [](int v){return 10;};
int main()
{
std::cout << (int)(is_predicate<decltype(predicate)>::value) << std::endl;
std::cout << (int)(is_predicate<decltype(not_a_predicate)>::value) << std::endl;
}Но что-то не работает. Где-то косячу