如何在C++中创建一个具有多个参数但只需要一个参数的函数?

我有一个函数需要两个“可选”参数,但函数的逻辑要求至少指定一个。如果a提供,则a使用。如果b提供,则b使用。如果没有提供任何参数,则抛出异常,因为此函数至少需要提供一个参数才能成功运行。有关示例,请参阅代码片段:

void print_it(A* a = nullptr, B* b = nullptr)
{
    std::cout << "The parameter provided was ";
    if (a != nullptr)
    {
        std::cout << a->print();
    }
    else if (b != nullptr)
    {
        std::cout << b->print();
    }
    else
    {
        throw std::invalid_argument();
    }
}

我会说这样的函数在运行时在调用其默认形式而不是使用类型安全并让编译器检查错误时崩溃是不好的做法。

如何更改此函数签名以要求提供的值之一具有最少的代码重复?

回答

你可以像这样重载它:

void print_it(A a, B b)
{
//use a and b
}

void print_it(A a) {
//use a
}
void print_it(B b) {
//use b
}

或者,您可以std::optional像这里解释的那样使用:https : //en.cppreference.com/w/cpp/utility/optional。例子:

void print_it(std::optional<A> a, std::optional<B> b)
{
    if (a.has_value()) {
        //use a
    }
    if (b.has_value()){
        //use b
    }
    else {
        throw std::invalid_argument();
    }
}


以上是如何在C++中创建一个具有多个参数但只需要一个参数的函数?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>