如何在C ++中实现类似属性的命名参数

问题描述

我在Array类中具有排序功能,并且想要实现类似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 ++中,静态语言是静态类型的语言,因此可以按参数类型区分重载。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...