2016-04-29 36 views
0
//SomeStruct.h 
namespace SomeNameSpace 
{ 
    typedef struct SomeStruct 
    { 
     int SomeVariable; 
    } SomeStruct, *PSomeStruct; 

} 

单独块中的名称空间声明。函数参数的正确语法是什么?

//Function.h 
namespace SomeNameSpace 
{ 
    Function(SomeStruct smStr); 
} 

然后代替

//Function.cpp 
#include "some_path_with_both_headers.h" 
void SomeNameSpace::Function(SomeStruct smStr) 
{ 
    ... 
} 

//Function.cpp 
#include "some_path_with_both_headers.h" 
void SomeNameSpace::Function(SomeNameSpace::SomeStruct smStr) 
{ 
    ... 
} 

使得参数是命名空间SomeNameSpace的结构体。第一个Function.cpp是正确的语法?

回答

1

您可以使用这两个版本,后者更详细。

编译器已经知道Function的命名空间,现在遇到它不知道的类型。所以它在相同的命名空间中开始搜索并发现SomeStruct,一切都很好。如果它在那里找不到它,它将在命名空间树上更高,直到它到达全局命名空间。

这叫做argument-dependent lookup(ADL),不仅适用于名称空间,而且适用于类。

+0

感谢我没有想到类情况。 –

2

你也可以这样做:

//Function.cpp 
#include "some_path_with_both_headers.h" 
namespace SomeNameSpace 
{ 
    void Function(SomeStruct smStr) 
    { 
     ... 
    } 
} 
相关问题