忽略引用函数参数

Ignore reference function argument

本文关键字:参数 函数 引用      更新时间:2023-10-16

我有这个签名的功能(我无法编辑它):

void foo(int a,int b, int& c);

我想打电话给它,但我不在乎得到c.目前我这样做:

int temp;
foo(5,4,temp);
//temp never used again

我的解决方案似乎很愚蠢。忽略此参数的标准方法是什么。

没有

如果您主要关心的是使用 temp 变量污染当前堆栈,那么像这样的包装器函数就足够了:

void foo_wrapper(int a, int b)
{
    int temp; foo(a, b, temp);
}

我会写一个重载,将输出参数转换为正常的返回值。我真的不喜欢输出参数,认为应该避免它们。

int foo(int a, int b) {
    int tmp = 0;
    foo(a,b, tmp);
    return tmp;
}

在你的程序中,你只是这个重载,要么忽略返回值,要么使用它。

这是一个过度工程化的解决方案,所以我实际上不建议将其作为生产代码中的第一个选项。

您可以创建一个类来帮助您轻松忽略这些类型的参数:


template <class T>
struct RefIgnore
{
    static inline T ignored_{};
    constexpr operator T&() const
    {
        return ignored_;
    }
};
template <class T>
constexpr RefIgnore<T> ref_ignore{};
void foo(int a,int b, int& c);
auto test()
{
    foo(2, 3, ref_ignore<int>);
}

您可以将其作为指针传递,而不是引用

void foo(int a,int b, int *c = NULL);

在呼叫地点,您可以将其作为

foo(5, 6);

或者如果你想传递第三个参数,那么你可以把它作为

int n = 3; foo (1, 2, &n);