//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是正确的语法吗?
答案 0 :(得分:2)
你也可以这样做:
//Function.cpp
#include "some_path_with_both_headers.h"
namespace SomeNameSpace
{
void Function( SomeStruct smStr )
{
...
}
}
答案 1 :(得分:1)
您可以使用这两个版本,后者更详细。
编译器已经知道Function
的命名空间,现在遇到了一个它不知道的类型。所以它在相同的命名空间中开始搜索并找到SomeStruct
,一切都很好。如果它找不到它,它将在命名空间树中更高,直到它到达全局命名空间。
这称为argument-dependent lookup(ADL),它不仅适用于名称空间,也适用于类。