使用 MATLAB 语法的 c++ 函数参数?
c++ function arguments with MATLAB syntax?
来自MATLAB,我想知道是否有办法像在MALTAB中那样在c ++中使用函数参数。这里有一个例子来说明我试图在 c++ 中使用什么:
draw('shape','circle','radius',5); // should draw a circle
draw('shape','square','width',3,'hight',4); // should draw a square
上面的函数是相同的,但函数参数不同。我想在 c++ 中使用此语法。有没有好方法可以做到这一点?谢谢。
您可以尝试以下方法(尽管不清楚您的主要意图是什么):
void MyDrawingFunc(const std::vector<std::string>& Arguments)
{
auto& arg = Arguments[0];
if (arg == "shape")
DoShapeStuff(Arguments); // use Arguments[1...]
else if (arg == "otherThing")
...
}
你可以让 c++ 像 MATLAB 一样工作(见上面的答案),但它没有太大意义。一个很好的指示是你的测试用例本身:
draw('shape','square','width',3,'hight',4); // should draw a square
你拼错了height
.在我通常的代码中,您将收到"未知说明符hight
"的(运行时)警告,并忽略 4 以支持默认值或可能什么都不做。这个警告在这里只是因为我费心把它写在otherwise
块里。很多同事的代码没有,只会默默地使用默认值或不做任何事情。
现在尝试在复杂的find some elements on image
函数中间调试它 - 你不会轻易发现它是你调用draw
函数时的简单拼写错误。
因此,与其用 c++ 编写 Matlab 代码,不如编写类似以下内容的内容:
void MyDrawingFunct(Shape shape){
...}
void MyDrawingFunct(Curve curve){
...}
您将在哪里绘制已定义的形状(如正方形,圆形等),以及曲线等的另一个函数。或者,如果您想防止将Ellipse
添加到Shape
并在运行时失败,您可以拥有更多函数 -...(Square ...)
等。
主要好处是,尝试使用 sayEllipsoid
调用MyDrawingFunct
会立即通知您错误(在编译时),而您通常的 MATLAB 方式会让您想知道ellipsoid
是否未实现或您只是在某处输入了错误(如您的示例)。您将在运行时击中它。
相关文章:
- static_assert在宏中,但也可以扩展到可以用作函数参数的东西
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- 当从函数参数中的临时值调用复制构造函数时
- 如何从"decltype()"获取函数参数的数量<funtion>?
- 如何将lambda作为模板类的成员函数参数
- 模板参数推导失败,函数参数/参数不匹配
- 如何在C++中将迭代器作为函数参数传递
- 将函数参数"const char*"转换为"std::string_view"是
- C++ 如何将数组值解压缩为函数参数
- 主函数参数的属性
- 具有两个间接寻址运算符 (C++) 的函数参数的用途
- "Warning: Comma within array index expression"但逗号分隔函数参数
- 如何定义在用作函数参数时工作的类模板的转换
- 将函数参数完美转发到函数指针:按值传递呢?
- 为什么我不能将引用作为 std::async 的函数参数传递
- 什么..(省略号)作为函数原型中唯一的函数参数,C++?
- 是否可以就地构造一个固定大小的数组作为函数参数?
- 接受模板作为函数参数
- 将成员函数作为构造函数参数调用时出错 "Variable is not a type name"
- Arduino 函数参数