2016-06-22 11 views
2

私はプログラミングは初めてですが、今年の夏にはインターンシップがあり、このコードを実行しようとしています。ポインタ:このコード行は何を意味していますか?

私は他の人のC++コード(「三角形メッシュのための正確な測地線」オープンソース)を通過しています.1行は私を踏みつけています。とにかく、行は次のようになります:

geodesic::Mesh* mesh = algorithms[algorithm_id]->mesh(); 

私が間違っているが、最初にポインタが初期化されている場合に私を修正してください。それはのように見える

私は何の手掛かりが等しいオペランドの右側の意味を持っていません。誰か助けてくれますか?ここ

+1

入力ミスがありますか?メンバー演算子 ' - >' **へのポインタにはスペースはありません**。 – Bathsheba

+1

'アルゴリズム'は配列/ベクトル/マップ(またはオーバーロードされた 'operator []'を持つ他の型)です。明らかに、別のポインタを返す 'mesh()'メンバを持つポインタを返します。 –

+2

'algorithm'はアルゴリズムの配列です。 'algorithm_id'はインデックス(与えられたアルゴリズム全体のアルゴリズムの番号)ですので、最初に与えられたアルゴリズムを取得します。一つのアルゴリズム(アルゴリズムへのポインタに過ぎないことに注意してください)を得たら、計算された 'Geodesic :: Mesh'構造のアドレスを返す' mesh() 'メソッドを呼び出します。 –

答えて

2

可能性を見てsource私はそれがstd::vector<algorithm_shared_pointer>と言うでしょう。 algorithm_shared_pointerboost::shared_ptr<geodesic::GeodesicAlgorithmBase>のtypedefです。

geodesic::Mesh* mesh = algorithms[algorithm_id]->mesh(); 

geodesic名前空間であるとMeshクラスは、その名前空間に位置しています。そのクラスへのポインタを作成します。ポインタには、によって呼び出すことができる関数呼び出しmesh()の結果が割り当てられます。 algorithm_idは、この行を含む関数のパラメータとして提供されるintです。

この整数は、ベクトルのインデックスを選択するために使用されます。それが原因mesh()戻り値の型がgeodesic::Mesh*であることにautoを使用している可能性を考慮コードの奇数枚でどの

namespace::pointerToClass* nameOfPointer 
    = std::vector<boost::shared_ptr<geodesic::GeodesicAlgorithmBase>>[int]->mesh(); 

:につながる


2
geodesic::Mesh* mesh = algorithms[algorithm_id]->mesh(); 

algorithmsはのタイプとすることができるいずれか:ANとシーケンシャル容器、

  • それは一体型整数によって索引付けされている場合には、アレイポインタ、algorithm_id
  • オーバーロードoperator[]たとえば、整数型整数でインデックス付けされたstd:vector
  • 過負荷operator []とR、例えばstd::map、それは鍵型オブジェクト、過負荷operator []algorithm_id
  • Aカスタム・タイプで索引付けされ、その署名によって指示されるように、カスタム型オブジェクト、algorithm_idでインデックス

配列[]アクセスは、geodesic::Meshオブジェクトへのポインタを返すメンバ関数mesh()を持つオブジェクトへのポインタ(通常ポインタまたはスマートポインタのいずれか)を返します。

algorithms[algorithm_id]の戻り値が何にbindedなかった、むしろ、は(もしそのない既に参照)一時としてを開催しました。そのメンバー関数mesh()が呼び出されます

関連する問題