Ребята, помогите написать перегруженную функцию, которая принимает на вход произвольный Callable объект:
template<typename Callable>
/* ... */ foo(Callable &&callable)
{
}
И делает следующие действия:
Для первой перегрузки : Если переданный объект может быть вызван от одного std::string
(т.е. если конструкция std::declval<Callable>()(std::declval<std::string>())
валидна), то тип возвращаемого значения foo
должен быть выведен как тип возвращаемого значения Сallable(std::string), т.е. decltype(std::declval<Callable>()(std::declval<std::string>()))(std::string)
. Например, если объект может быть вызван от одного std::string
и в результате такого вызова возвращает double
, то тип возвращаемого значения foo
должен быть double(std::string)
. Если переданный объект не может быть вызван от одного std::string
, то по принципу SFINAE эта перегрузка foo
должна отброситься.
Для второй перегрузки : Аналогично, только теперь вместо std::string
- int
Говоря простыми словами, мне нужно проверить, можно ли вызвать переданный Callable-объект от одного std::string
, и, если да, то вывести "сигнатуру" этого объекта. Если нельзя, то проверить то же самое для одного int
Очень желательно без C++17
Вроде не так уж и сложно:
#include <type_traits>
#include <utility>
#include <string>
#include <iostream>
template<typename Callable> auto
foo(Callable && callable) -> decltype(::std::declval<Callable>()(::std::declval<::std::string>()))
{
::std::cout << "string" << ::std::endl;
return callable(::std::string{});
}
template<typename Callable> auto
foo(Callable && callable) -> decltype(::std::declval<Callable>()(::std::declval<int>()))
{
::std::cout << "int" << ::std::endl;
return callable(int{});
}
int main()
{
::std::cout << foo([](::std::string) { return "test"; }) << ::std::endl;
::std::cout << foo([](int) { return 42; }) << ::std::endl;
}
online compiler
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Работаю в visual studioНашел библиотеку с большими числами:bigint, но не понимаю как ее правильно подключить и использовать
Вопрос такой, почему когда прописываю стили в таблице стилей styleqss вот таким способом, то стили не применяются:
Привет всемЕсть необходимость парсить строку следующего вида: -f 1000 -d 10 -f 90 Необходимо такую строку спарсить (независимо от расположения аргументов),...