2013-03-27 65 views
0

我正在处理一个相当大的项目,并且提出了一个我不明白的声明。它看起来像这样:函数调用前面的类型声明是什么意思

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

我会给你更多的代码,但它是真正巨大的,我真的不能告诉哪些部分是有关这一点。有趣的是,我甚至无法在DFV结构中找到任何叫做visitor的函数或者它的前身,Eclipse也没有。我很确定我没有得到这个权利的意义,我无法找到任何这种c + +语法的参考。任何人都可以向我解释一般这样的陈述的含义吗?

Type<SomeClass> foo(x, y); 
+1

第二个定义了一个名为'类型的'类型foo'的对象,条件是有两个参数的构造,'x'和'初始化y'。 – 2013-03-27 22:18:08

+1

为什么在没有对C++语法的恰当知识的情况下开展“一个相当大的项目”?我建议你阅读[好书](http:// stackoverflow。com/questions/388242/the-definitive-c-book-guide-and-list)首先 – 2013-03-27 22:27:50

+0

谢谢,你一直很有帮助。我对代码和所有不熟悉的模板用法感到不知所措,而且我忽略了基本知识。尽管我在整个下午都在想这个问题,但是我在发布问题5分钟后自己找到了答案,并开始用键盘敲打我的头。 – SirGlorg 2013-03-27 22:44:49

回答

3

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

难道是因为

typedef visitor::DFV<Outer> Type; 

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

Type visitor(x, y, z); 
0

更加清晰为了您的一般示例:

Type<SomeClass> foo(x, y); 

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

类模板Type会有一些构造,在其定义中(通常是在其头文件),它看起来像:

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

值得补充的是,范围'visitor ::'可能引用一个名为'visitor'的类或名称空间。 – Keith 2013-03-27 22:32:46

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是derefenced指针到正在调用该函数的类,this->graph()是调用此函数的类graph()中的方法的返回值,this->store()与图相同,但返回值为store()

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

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

“我会将此解释为一个函数,它既可以是类访问器中的静态函数,也可以是名称空间访问器中的全局函数,我只能使用可用的代码进行说明。”它也不能,你在说什么? – 2013-03-27 22:56:12

+0

它怎么可能不是?如果你调用一个像这个'foo :: bar()'这样的函数,它可能是一个名为foo的名字空间函数bar,或者是一个名为foo的类中的静态函数。我不明白什么是不能得到的? – 2013-03-27 23:08:00

+0

是的,但不能调用函数*和*在同一语句中声明它的类型。 – 2013-03-28 06:54:34

相关问题