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

对于您的通用示例:

Type<SomeClass> foo(x, y);

这是一个变量定义,其中Type<SomeClass>是变量的类型,foo是它的名称,其余的是传递给类的构造函数的参数。

类模板Type将有一些构造函数,可以在其定义中(通常在其头文件中)找到,如下所示:

template< typename T >
class Type
{
public:
    Type( int x, int y );
};
于 2013-03-27T22:19:21.557 回答
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 相同,但返回值为.graph()this->store()store()

第二位是实例化这样的模板类

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