使用 MATLAB 语法的 c++ 函数参数?

c++ function arguments with MATLAB syntax?

本文关键字:函数 参数 c++ MATLAB 语法 使用      更新时间:2023-10-16

来自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是否未实现或您只是在某处输入了错误(如您的示例)。您将在运行时击中它。