是否可以在不填充自己的参数的情况下将模板函数作为参数传递?

Is it possible to pass a template function as argument without filling its own arguments?

本文关键字:函数 参数传递 情况下 填充 参数 自己的 是否      更新时间:2023-10-16

对不起,如果这个问题看起来很愚蠢。但是我有以下编译代码。我想知道是否可以仅传递函数的名称作为模板,然后再将其填充到函数中?例如,在这里我们有

template<typename T>
int getDiscount(T t,const std::vector<int> & discounts) {
return t(discounts);
}

是否可以像getDiscount(discount.getMaxDiscount)一样只传入main而不会出现编译错误?我正在研究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;
}

你可以这样做:

std::cout << getDiscount(std::mem_fn(&Discount::getMaxDiscount), discount) << std::endl;

或使用 lambda:

std::cout << getDiscount([](const Discount& discount){ return discount.getMaxDiscount()), discount) << std::endl;