0

私はかなり大規模なプロジェクトに取り組んでいますが、理解できない声明を出しました。次のようになります。

visitor::DFV< Outer > visitor( *this, this->graph(), this->store() );

もっと多くのコードを提供したいと思いますが、それは非常に巨大で、どの部分がこれに関連しているのかわかりません。visitor興味深いのは、構造 DFV またはその前身で呼び出された関数を見つけることさえできず、 Eclipse もそうではないことです。私はこの権利の意味を理解していないと確信しており、この C++ 構文への参照を見つけることができません。このようなステートメントの意味を一般的に説明できる人はいますか?

Type<SomeClass> foo(x, y);
4

3 に答える 3

3

これは関数呼び出しではなく、変数定義であり(...)、コンストラクターのパラメーター リストです。

次のようにもっと明確になりますか

typedef visitor::DFV< Outer > Type;

//...
Type visitor(*this, this->graph(), this->store());

また

Type visitor(x, y, z);
于 2013-03-27T22:18:05.277 に答える
0

この構文を理解していないと、C++ を本当によく理解していないと思います。

visitor::DFV< Outer > visitor( *this, this->graph(), this->store() );

これを、クラス ビジターの静的関数または名前空間ビジターのグローバル関数のいずれかの関数として解釈します。利用可能なコードで言えることはそれだけです。この<Outer>部分は、たとえば、このようなテンプレートを作成した場合の関数のテンプレート引数です

template<class T> 
int someFunc<T>(T i, Tx)
{
    //whatever operations in the function
}

次に、その関数を呼び出したいときは、これを行うだけです

int i = someFunc<int>(2, 3);
//alternatively
int x = someFunc<std::string>("Hello", "World");

*thisは関数を呼び出しているクラスへの参照解除されたポインターです。 はこの関数を呼び出しているクラスthis->graph()のメソッドの戻り値です。はグラフと同じですが、戻り値はです。graph()this->store()store()

2 番目のビットは、このようなテンプレート クラスのインスタンス化です。

template<class T>
class Type
{
public:
    Type(T x, T y);
};
于 2013-03-27T22:43:54.120 に答える
0

あなたの一般的な例の場合:

Type<SomeClass> foo(x, y);

It's a variable definition, where Type<SomeClass> is the type of the variable, foo is its name and the rest are the parameters passed to the class' constructor.

The class template Type will have some constructor, found in its definition (usually in its header file) which looks like:

template< typename T >
class Type
{
public:
    Type( int x, int y );
};
于 2013-03-27T22:19:21.557 に答える