2017-05-07 9 views
0

MATLABから、MALTABで行われているように、関数の引数をC++で使用する方法があるかどうかを知りたいと思います。ここでは、私がC++で使用しようとしているものの例を示します:MATLAB構文のC++関数引数?

draw('shape','circle','radius',5); // should draw a circle 
draw('shape','square','width',3,'hight',4); // should draw a square 

上記の関数は同じですが、関数の引数が異なります。私はこの構文をC++で使いたいと思います。これを行う良い方法はありますか?ありがとう。

+1

これは本当に必要なものですか? C++には、ポリモーフィズムなどの文字列に依存しない、よりクリーンなソリューションが用意されています。 1つの利点は、ランタイムエラーではなく、コードミスの場合にコンパイル時エラーが発生することです。そしてあなたのIDEはあなたのためにそれを好きになるでしょう。 – Bernhard

答えて

2

あなたが試みることができる(それはあなたの主な目的が何であるか本当にはっきりしないのですが)、以下:

void MyDrawingFunc(const std::vector<std::string>& Arguments) 
{ 
    auto& arg = Arguments[0]; 

    if (arg == "shape") 
     DoShapeStuff(Arguments); // use Arguments[1...] 
    else if (arg == "otherThing") 
      ... 
} 
2

あなたは正確にMATLABのようなC++の作業を行う(上記の答えを参照)ことができますが、それはあまりにもなりません。多くのセンス。あなたはheightをつづりの間違っ

draw('shape','square','width',3,'hight',4); // should draw a square 

:そのために非常に良い兆候は、あなたのテストケースそのものです。私の通常のコードでは、 "unknown specifier hight"という警告を(実行時に)得て、デフォルト値に賛成して無視するか、おそらく何もしないようにします。そして、この警告はブロックotherwiseに書かれているので、ここにしかありません。多くの同僚のコードでは、デフォルト値を静かに使用したり、何もしません。

複雑なfind some elements on image関数の途中でデバッグを試してみてください。draw関数の呼び出しで単純なタイプミスであることが簡単にわかりません。代わりに、C++でのMATLABコードを作るの

ので、あなたのような何かを書く必要があります:あなたは、曲線などのために別の関数(四角、丸などのように)あなたが定義した図形を描くでしょう

void MyDrawingFunct(Shape shape){ 
...} 

void MyDrawingFunct(Curve curve){ 
...} 

あなたはShapeからEllipseを追加する発言に対して保護したいと、それは実行時に失敗している場合か、あなたはいくつかのより多くの機能を持つことができます - ...(Square ...)など

主な利点Ellipsoidはすぐに通知されますと言うとMyDrawingFunctを呼び出そうということですエラー(コンパイル時)あなたの普通のMATLABの方法では、ellipsoidが実装されていないのか、あなたの例のように入力ミスがあったのか疑問に思うでしょう。そして、実行時にそれを打つでしょう。