忽略引用函数参数
Ignore reference function argument
我有这个签名的功能(我无法编辑它):
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);
相关文章:
- 将可变参数函数的参数封装在类实例中
- QML 使用带有参数C++函数
- 使用可变参数函数作为模板参数
- 如何在C++中伪造虚拟可变参数函数模板?
- 为什么可变参数函数不适用于模板
- C++ std::functional 中的可变参数函数模板
- 可变参数函数指针的定义对于VxWorks spyLib来说不清楚
- 使用可变参数函数覆盖具有不同函数签名的虚函数
- 考虑引用和常量的可变参数函数包装器
- 使用可变参数函数将整数和/或整数数组放入单个 int 数组中
- 在可变参数函数中转发特定范围的参数
- 通过引用传递参数;函数返回类型是否必须为 VOID?
- 使用带有一个参数函数的递归找到数字的平方
- 可变参数函数模板不能很好地使用 std::function 作为参数
- 多个可变参数函数的单个模板参数包?
- 参数数据类型未知的可变参数函数
- 可变参数函数参数包扩展
- 使用模板可变参数函数将多个参数传递给另一个函数
- 对可变参数函数的递归调用的链接器错误
- 通过像printf这样的可变参数函数传递一个带有常量字符*转换函数的类