函数调用前的类型声明是什么意思?

What does a type declaration in front of a function call mean

本文关键字:是什么 意思 声明 类型 函数调用      更新时间:2023-10-16

我正在处理一个相当大的项目,我提出了一个声明,我不明白。它看起来像这样:

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

我会给你更多的代码,但它真的很大,我真的不能告诉哪些部分是相关的。有趣的是,我甚至在DFV结构或它的前身中找不到任何称为visitor的函数,Eclipse也找不到。我很确定我没有得到这个正确的含义,我找不到任何参考这个c++语法。谁能给我解释一下这种说法的大致意思?

Type<SomeClass> foo(x, y);

这不是一个函数调用,而是一个变量定义,(...)是构造函数参数列表。

会更清楚吗?
typedef visitor::DFV< Outer > Type;
//...
Type visitor(*this, this->graph(), this->store());

Type visitor(x, y, z);

对于您的通用示例:

Type<SomeClass> foo(x, y);

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

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

template< typename T >
class Type
{
public:
    Type( int x, int y );
};

如果你不了解这种语法,我认为你并没有真正很好地理解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()与graph相同,但返回值为store()

第二个位是像这样实例化一个模板类

template<class T>
class Type
{
public:
    Type(T x, T y);
};