是否可以在不填充自己的参数的情况下将模板函数作为参数传递?
Is it possible to pass a template function as argument without filling its own arguments?
对不起,如果这个问题看起来很愚蠢。但是我有以下编译代码。我想知道是否可以仅传递函数的名称作为模板,然后再将其填充到函数中?例如,在这里我们有
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;
相关文章:
- 如何在C++中将迭代器作为函数参数传递
- 为什么我不能将引用作为 std::async 的函数参数传递
- 节点插件 API 将数组作为函数参数传递
- 将字符串数组作为函数参数传递
- 如何通过 C++ 中的函数参数传递初始值设定项列表的固定大小的初始值设定项列表?
- 我可以动态创建新地图并作为函数参数传递吗?
- 将任意模板向量作为函数参数C++传递
- 将函数指针作为函数参数传递的目的
- C++:通过函数参数传递的值给出不同的结果
- 当数组大小在C++中未知时,如何在运行时将对字符串数组的引用作为函数参数传递?
- 通过宏将函数参数传递给函数
- C++:访问作为函数参数传递的双指针数组所指向的变量的值
- 如何将 std::string 作为构造函数参数传递,并将其保存的 C 字符串存储在 void 指针中?
- 将派生类构造函数参数传递给受保护的成员
- 将指向数组的指针作为函数参数传递,这本身就是另一个函数的返回值?
- 如何将二维数组类型字符(字符串)作为函数参数传递?
- 有什么理由C++ 11+ std::mutex 应该声明为全局变量,而不是作为函数参数传递到 std::thread 中
- 如何将派生类作为函数参数传递:如果派生类成员不在父类中怎么办
- 如何将变量作为构造函数参数或函数参数传递
- 当数组对象以函数参数传递时,为什么复制构造函数会自称