Мне любопытно, когда в C ++ требуются аргументы шаблона.
Например, давайте определим класс как
template<typename T> class Add {
T value;
public:
Add(T value) : value(value){};
T operator() (T valrhs){
return value + valrhs;
}
};
Если мы хотим создать объект типа Add, используя double, нам нужно определить его следующим образом, чтобы не получать ошибки,
Add<double> add5 = Add<double>(5.0);
Теперь рассмотрим функцию, определенную следующим образом:
template<typename T, typename Function> T doOperation (T data, Function f){
return f(data);
}
В коде, если нужно сделать вызов doOperation, аргументы шаблона не потребуются. Например,
std::cout << doOperation(5.0, add5);
выведет 10. Почему doOperation не требует аргументов шаблона, а определение add5 требует аргументов шаблона?
Кроме того, есть ли способ определить это с помощью указателей на функции. Я застрял, пытаясь выяснить, как передать такой функтор, используя указатель функции в качестве переменной параметра, а не второй аргумент шаблона.
Спасибо, любая помощь приветствуется.