仅向一个带两个整数的函数发送一个整数

时间:2016-12-04 19:17:54

标签: c++

我对C ++很新鲜,并尝试使用函数进行不同的操作。我刚遇到一个问题,或者说是一个反思。

想象一下;我们有一个功能:

void test(int one, int two) {

if(one == 5) {
   cout << "one is 5" << endl;
}
if(two == 10) {
   cout << "two is 10" << endl;
}
if(one == 1 && two == 2) {
   cout << "they both are 1 and 2" << endl;
}

}

然后在这里我们有我们的主要功能,我们称之为测试: 测试(1,8)这很好,但如果我在某些情况下只想打电话给test(1)怎么办?如果我不想给函数赋两个整数怎么办?因为我希望它只为int one做一些东西?我想通过简单地执行test(1,NULL)test(NULL,10)来解决这个问题,但这很丑陋吗?

必须有办法,我知道我的榜样很糟糕,但我希望你明白我的观点。

4 个答案:

答案 0 :(得分:3)

一种方法是为第二个提供默认参数:

void test(int one, int two = 0)

然后,如果仅使用一个参数调用它,则第二个参数将采用默认值。

另一种方法是重载函数:

void test(int one)

这样做的好处是,您可以为传递单个参数的情况编写特定行为。

答案 1 :(得分:0)

如果您需要部分评估,请参阅std::bind

#include <iostream>
#include <functional>

using namespace std::placeholders;

int adder(int a, int b) {
    return a + b;
}

int main() {
    auto add_to_1 = std::bind(adder, 1, _1);

    auto add_1_to = std::bind(adder, _1, 1);

    std::cout << add_1_to(2) << std::endl;

    std::cout << add_to_1(2) << std::endl;

    return 0;
}

答案 2 :(得分:0)

有两个选项:

void test(int one, int two = -1) {
   /* ... */
}

这给函数一个默认值,因此调用test(2)意味着测试函数将以1 = 2和2 = -1运行。只有在函数定义中没有默认参数的变量时,这些默认值才有效。

void testA(int one, int two = -1); // OK
void testB(int one, int two = -1, int three); // ERROR
void testC(int one, int two = -1, int three = -1); // OK

然后另一个选择是重载此功能。重载意味着一个函数有两个不同的定义。重载函数时要遵循一些规则,主要是不同的重载必须通过您提供的参数来区分。因此,在您的情况下,解决方案将是:

void test(int one) {
   /* ... */
}
void test(int one, int two) {
   /* ... */
}

如果您有任何其他问题,请随时提出。

答案 3 :(得分:-1)

你不能。您必须为函数的每个参数提供参数。如果有默认参数,您可能不需要明确地这样做,但仍然为该参数提供参数。