如何在 C++ 中实现像 属性 这样的命名参数
how to implement named parameter like property in c++
我在 class 数组中有一个排序函数,想实现类似于 python sort(reverse=True)
中的功能。我想向用户展示他们可以传递此参数,因为现在 arr.bubble_sort(true);
(检查代码)没有多大意义。我不希望 lambda 函数知道如何实现这一点。
任何其他方法也有效,因为我知道命名参数可能不存在于 c++ 中。
PS: 顺便超载了
此致,
// inside class Array
void bubble_sort(bool rev){ //overloaded bubble_sort
if(rev){
int i,j;
for(i=0; i<size-1; i++){
for(j=0; j<size-i-1; j++){
if(arr[j] < arr[j+1]){
std::swap(arr[j], arr[j+1]);
}
}
}
}
else{
int i,j;
for(i=0; i<size-1; i++){
for(j=0; j<size-i-1; j++){
if(arr[j] > arr[j+1]){
std::swap(arr[j], arr[j+1]);
}
}
}
}
}
int main()
{
int n;
std::cin >> n;
Array arr(n); // parameterized constructor initializing array of size n
arr.bubble_sort(true);
arr.print();
return 0;
}
只需提供此重载:
void bubble_sort(std::function<bool<int, int>> cmp) {
...
if(cmp(arr[j], arr[j+1])){
std::swap(arr[j], arr[j+1]);
}
...
}
void bubble_sort(bool rev = false)
{
bubble_sort(rev ? std::greater<int>{} : std::less<int>{});
}
注意c++是静态类型语言,所以重载可以通过参数类型来区分。
我在 class 数组中有一个排序函数,想实现类似于 python sort(reverse=True)
中的功能。我想向用户展示他们可以传递此参数,因为现在 arr.bubble_sort(true);
(检查代码)没有多大意义。我不希望 lambda 函数知道如何实现这一点。
任何其他方法也有效,因为我知道命名参数可能不存在于 c++ 中。
PS: 顺便超载了
此致,
// inside class Array
void bubble_sort(bool rev){ //overloaded bubble_sort
if(rev){
int i,j;
for(i=0; i<size-1; i++){
for(j=0; j<size-i-1; j++){
if(arr[j] < arr[j+1]){
std::swap(arr[j], arr[j+1]);
}
}
}
}
else{
int i,j;
for(i=0; i<size-1; i++){
for(j=0; j<size-i-1; j++){
if(arr[j] > arr[j+1]){
std::swap(arr[j], arr[j+1]);
}
}
}
}
}
int main()
{
int n;
std::cin >> n;
Array arr(n); // parameterized constructor initializing array of size n
arr.bubble_sort(true);
arr.print();
return 0;
}
只需提供此重载:
void bubble_sort(std::function<bool<int, int>> cmp) {
...
if(cmp(arr[j], arr[j+1])){
std::swap(arr[j], arr[j+1]);
}
...
}
void bubble_sort(bool rev = false)
{
bubble_sort(rev ? std::greater<int>{} : std::less<int>{});
}
注意c++是静态类型语言,所以重载可以通过参数类型来区分。