gpt4 book ai didi

c++ - 定义命名空间成员与无限定的自由函数

转载 作者:行者123 更新时间:2023-11-28 03:47:20 24 4
gpt4 key购买 nike

我有时会在嵌套的命名空间中声明类,当涉及到定义它们的成员函数时,我不想用这些嵌套的命名空间名称来限定每个类,尤其是当它们很长时。

在我定义成员函数之前添加“using namespace”(或者,为了更精确的目标,“using::SomeClass”)似乎避免了对每个定义进行限定的需要,但我在规范中找不到任何地方保证这一点,我担心这可能是一种只适用于 GCC 的行为。我注意到似乎没有类似的机制来跳过在定义自由函数时添加限定符的需要(?)。

举个例子说明我的意思:

标题:

// example.h
namespace SomeNamespace
{
class SomeClass
{
public:
void someMemberFunction();
};

void someFreeFunction();
};

实现:

// example.cpp
#include "example.h"

using namespace SomeNamespace;

void SomeClass::someMemberFunction()
{
// OK: seems to define SomeNamespace::SomeClass::someMemberFunction(),
// even though we didn't qualify it with SomeNamespace::
}

void someFreeFunction()
{
// Not what we wanted; declares and defines ::someFreeFunction(), not
// SomeNamespace::someFreeFunction() (quite understandably)
}

int main()
{
SomeClass a;
a.someMemberFunction(); // Ok; it is defined above.
SomeNamespace::someFreeFunction(); // Undefined!
return 0;
}

所以我的问题是:上述定义 SomeClass::someMemberFunction() 的方式是否合法,规范中的何处提到了这一点?如果合法,是否可取?它肯定会减少困惑! :)

非常感谢:)

最佳答案

也许我理解错了,但如果你有:

// example.h
namespace SomeNamespace
{
class SomeClass
{
public:
void someMemberFunction();
};

void someFreeFunction();
};

你也可以简单的写:

#include "example.h"

// example.cpp
namespace SomeNamespace
{
void SomeClass::someMemberFunction()
{
}

void someFreeFunction()
{
}
}

关于c++ - 定义命名空间成员与无限定的自由函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7173564/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com