C++函数参数或参数数组
C++ function parameters or parameter array
我的背景和直觉告诉我,我应该始终通过要求这样的参数来为函数创建一个更紧密、更明确的接口:
bool someFunc(int param1, int param2, char param3, float param4) {
...
}
或需要一个对象(结构或类),例如:
class someObject {
...
int p1;
int p2;
char c1;
float p4;
}
我的老板告诉我,我应该使用这样的东西:
bool someFunc(void *params[], int size) {
...
}
因为它创建了更具可扩展性(您可以通过这种方式迭代参数)和更快的代码。
我只对提高我的能力感兴趣,但我的直觉与这种方法背道而驰。 他说的对吗?
可怕的想法。我无法在一个答案中列出它不好的原因,但主要问题是它不起作用。举个简单的例子,你不能传递 3,如果你传递 0,它就会变成一个 nullptr。更重要的是,无论如何都必须将值转换回给定类型,那么为什么不在签名中指定类型呢?
现在有一个真正的C++替代,可变参数模板:
template<typename... Arguments>
void Foo(Arguments... parameters);
在这种情况下,编译器将知道Arguments...
中的所有类型,无需强制转换任何内容。
我不同意上面的答案,你的直觉是对的,你应该尝试为函数创建一个显式接口。 有时你不能有一个显式的接口,然后你应该考虑可变参数模板参数,但它们很少见。 两个 Int 一个字符和浮点数似乎是一个完全合理的函数参数。
然而,你处于一个非常棘手的境地,你不想反对你的老板。 我会怀疑他的任何编程建议,他要么不是一个非常好的程序员,要么更糟糕的是那些老派的黑客c程序员之一(看看他是否到处都使用宏)。 我的建议是现在就按照他的方式做,然后如果你再次使用该函数,以后修复它并尝试让其他人审查你的代码。
你的老板疯了。这种放荡在 C 语言中占有一席之地,即使在那里你也会使用 varargs,而不是这种疯狂的结构。如果要使用动态类型语言进行编程,请不要使用 C++,要么使用变体类型的数组(例如 boost::variant
或 QVariant
)。
你的老板正在寻找但明显缺少的"可扩展性"也称为函数/方法重载。它作为适当设计的一部分,而不是作为法令。
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- 为 NewObjectA() 函数创建 jvalues 的参数数组时出错 - JNI Invocation API
- 估计函数参数数组的维度
- 温度参数数组的内存泄漏
- 如何将值附加到命令行参数数组?
- libpqxx:如何绑定参数数组
- 如何在德尔福中C++参数数组指针算术
- C++函数参数或参数数组
- 将 std::function 代理为需要参数数组的 C 函数
- 分析字符串参数数组
- Pro*C传递参数数组
- OpenCV错误:cvGetSize中的错误参数(数组应该是CvMat或IplImage)
- c++无限参数数组
- 查找命令行参数数组中的元素数
- 如何将目录中所有具有完整路径的文件传递到execv中的参数数组
- ODBC:参数数组-忽略参数
- 使用lambda参数数组