C ++,类作为方法的参数,而不是模板

时间:2010-05-14 18:46:25

标签: c++ class

所以,我遇到了一个有趣的方法签名,我不太明白,它是这样的:

void Initialize(std::vector< std::string > & param1, class SomeClassName * p);

我不明白的是“class”关键字被用作参数,为什么会出现?是否有必要指明或纯粹是肤浅的?

4 个答案:

答案 0 :(得分:16)

这是该课程的前瞻性声明。它与

实际上是一样的
class SomeClassName;
void Initialize(std::vector< std::string > & param1, SomeClassName * p);

在许多情况下,前瞻性声明是有用的;在this answer to another question中有一个前瞻性声明可以做和不能做的事情清单。

答案 1 :(得分:1)

这不是肤浅的。它允许您将“SomeClassName”指定为参数,即使尚未定义“SomeClassName”。

答案 2 :(得分:1)

最肤浅的。在C中,定义结构时:

struct x { 
    int member;
    char member2;
};

要使用它,您必须使用struct x whatever。如果您想单独使用x作为名称(前面没有struct),则必须使用typedef

typedef struct x { 
    int member;
    char member2;
} x;

但是,在C ++中,第一个(没有typedef)与第二个具有大致相同的效果(都定义x,因此您可以单独使用它,而不需要struct它)。在C ++中,classstruct基本相同,只是它默认为private而不是public(对于成员和继承)。

唯一有区别的地方是,如果在函数声明的范围内没有class的定义。

答案 3 :(得分:0)

和你写的一样:

for(int i=0;i<10;i++) 

as

int i; 
for(i=0;i<10;i++)

类声明是一个定义和指向它的指针