Задать вопрос
Dyikot
@Dyikot

Возможно ли проверить является ли T std::function?

Мне требуется узнать является ли T std::function. У могу передать std::function с разными аргументами. Но имеено важно определить что это именно std::function. С std::is_convertible и std::is_same не сработало.
  • Вопрос задан
  • 93 просмотра
Подписаться 1 Простой 2 комментария
Решения вопроса 1
@Acaunt
Если правильно понял вопрос, то можно сделать так:
Пример
#include <iostream>
#include <functional>

template<class T>
struct is_function {
    constexpr static bool value = false;
};

template<class T>
struct is_function<std::function<T>> {
    constexpr static bool value = true;
};

template<class T>
constexpr static bool is_function_v = is_function<T>::value;

template<class T>
void check(T t) {
    if constexpr (is_function_v<T>) {
        std::cout << "is std::function" << std::endl;
    }
    else {
        std::cout << "is not std::function" << std::endl;
    }
}

void f2() {}

int main() {
    std::function f1 = [](){};
    std::function f3 = f2;
    check(f1); // is std::function
    check(f2); // is not std::function
    check(f3); // is std::function
    
    return 0;
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы