Как сделать возможность автоматического выведения типа аргумента-функции? C++
Есть такой шаблонный метод, который принимает std::function:
#include <functional>
template<typename C>
class Deduce
{
C c = 0;
public:
template<typename R>
C then(const std::function<R(C)>& func) {
return func(c);
}
};
Можно ли сделать так, чтобы при вызове метода не приходилось писать тип возвращаемого значения явно: obj.my_method<my_type>(func)? Я видел код, где этот тип автоматически выводился из типа возвращаемого значения аргумента-функции. Где можно почитать про это?
Ответы (1 шт):
Автор решения: user7860670
→ Ссылка
Для этого достаточно будет использовать автоматическое выведение типа возвращаемого значения функции:
#include <iostream>
template<typename C>
class Deduce
{
private: C c{42};
public: template<typename x_Invocable>
auto then(x_Invocable && invocable)
{
return invocable(c);
}
};
int increment(int i)
{
return i + 1;
}
int main()
{
Deduce<int> deduce{};
std::cout << deduce.then(increment) << "\n";
return 0;
}