Простите, если вопрос выглядит глупо. Но у меня есть следующий код, который компилируется. Мне было интересно, можно ли передать в качестве шаблона только имя функции, а затем заполнить его функцией? Как, например, здесь у нас есть
template<typename T>
int getDiscount(T t,const std::vector<int> & discounts) {
return t(discounts);
}
Можно ли просто передать main
, например getDiscount(discount.getMaxDiscount)
, не получая ошибки компиляции? Я работаю над C ++ 11
#include <iostream>
#include <vector>
#include <algorithm>
class Discount {
public:
Discount() {}
int getMaxDiscount(const std::vector<int> & discounts) {
return *max_element(discounts.begin(),discounts.end());
}
int getMinDiscount(const std::vector<int> & discounts) {
return *max_element(discounts.begin(),discounts.end());
}
};
int getMinDiscount(const std::vector<int> & discounts){
Discount discount;
return discount.getMinDiscount(discounts);
}
int getMaxDiscount(const std::vector<int> & discounts){
Discount discount;
return discount.getMaxDiscount(discounts);
}
template<typename T>
int getDiscount(T t,const std::vector<int> & discounts) {
return t(discounts);
}
int main()
{
std::vector<int> discs = {1,2,3,4};
std::cout << getMaxDiscount(discs) << std::endl;
Discount discount;
std::cout << getDiscount(discount.getMaxDiscount) << std::endl;
return 0;
}