gpt4 book ai didi

c++ - 如果将我的 'using block' 构造添加到 C++,您会预见到什么问题?

转载 作者:太空宇宙 更新时间:2023-11-04 15:27:49 25 4
gpt4 key购买 nike

带有如下声明的头文件:

void FooBar(System::Network::Win32::Sockets::Handle handle, System::Network::Win32::Sockets::Error& error/*, more fully-qualified param
声明... */);

在某些框架中很常见。并使用声明,这可以减轻这个问题,一般不认为 kosher 在头文件中使用因为它们会影响头文件的名称查找规则稍后包含。声明为私有(private)的类中的 typedef 困惑类的命名空间和从它派生的类的命名空间。

这是一个建议的解决方案:

using {
// A 'using' block is a sort of way to fence names in. The only names
// that escape the confines of a using block are names that are not
// aliases for other things, not even for things that don't have names
// of their own. These are things like the declarations for new
// classes, enums, structs, global functions or global variables.
// New, non-alias names will be treated as if they were declared in
// the scope in which the 'using' block appeared.

using namespace ::std;
using ::mynamespace::mytype_t;
namespace mn = ::mynamespace;
using ::mynamespace::myfunc;

class AClass {
public:
AClass(const string &st, mytype_t me) : st_(st), me_(me) {
myfunc(&me_);
}

private:
const string st_; // string will refer to ::std::string
mn::mytype_t me_;
};
// The effects of all typedefs, using declarations, and namespace
// aliases that were introduced at the level of this block go away
// here. typedefs and using declarations inside of nested classes
// or namespace declarations do not go away.
} // end using.

// Legal because AClass is treated as having been declared in this
// scope.
AClass a("Fred", ::mynamespace::mytype_t(5));

// Not legal, alias mn no longer exists.
AClass b("Fred", mn::mytype_t);

// Not legal, the unqualified name myfunc no longer exists.
AClass c("Fred", myfunc(::mynamespace::mytype_t(5));

在 Java 和 Python 中,单个文件以特殊方式处理。您可以使用导入声明将名称从其他 namespace 注入(inject)到文件中。这些名称(好吧,不完全是 Python,但在这里解释起来太复杂了)仅在该文件中可见。

我认为 C++ 需要类似的结构。预处理器、#include 指令和翻译单元的 C++ 概念的存在使得导入名称的隐式范围界定存在问题。因此,我认为需要一些机制来明确界定此类临时别名的范围。

您预见到这个想法有什么问题?如果没有问题,或者问题很小并且可以解决,我将如何将其作为提案提交给标准委员会?

最佳答案

ISO/IEC JTC1/SC22/WG21(又名 C++)标准委员会即将完成 C++0x标准;您基本上没有机会将此提案纳入 C++0x 标准。

对于任何提案,您都必须提出该功能的动机,解释为什么应将其添加到标准而不是其他 50 个争夺特权的提案。 (请参阅 D&E 中 Stroustrup 的解释 - “C++ 的设计与演化”。)

您还可以从实现中获益,该实现可用且已被使用,因此人们可以在工作中亲 body 验该功能。虽然它仍然是抽象的和未实现的,但您冒着重复 export 惨败的风险,并且委员会试图避免重复这种情况。这样做的一个好处是它有助于建立对使用您的功能感兴趣的人的支持者。如果您不能建立这样的支持者,也许您的提案不值得纳入标准。

您在此处提供的内容可能是一个有趣的开始,但距离达成标准提案所需的内容还差得很远。查看开放标准网站上的文档。考虑一下您是否拥有可支配的资源来推进这项工作。很抱歉,您很可能没有。

关于c++ - 如果将我的 'using block' 构造添加到 C++,您会预见到什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4370702/

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