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

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

Мне требуется узнать является ли T std::function. У могу передать std::function с разными аргументами. Но имеено важно определить что это именно std::function. С std::is_convertible и std::is_same не сработало.
  • Вопрос задан
  • 115 просмотров
Подписаться 1 Простой 2 комментария
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Разработчик C++
    9 месяцев
    Далее
  • Академия Codeby
    Курс «Анализ защищенности инфраструктуры на основе технологий Active Directory»
    4 месяца
    Далее
  • Академия Codeby
    Курс «Цифровая криминалистика и реагирование на инциденты ОС Linux (DFIR)»
    14 недель
    Далее
Решения вопроса 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;
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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