当前位置:  开发笔记 > 编程语言 > 正文

是否有技术原因不允许使用声明来使用不同的名称访问函数名称?

如何解决《是否有技术原因不允许使用声明来使用不同的名称访问函数名称?》经验,为你挑选了2个好方法。

考虑

namespace foo
{
  namespace bar
  {
    void f();
    void f(int);
  }
}

foo一个可以使所有foo::bar::f可访问为foo::fvia

using bar::f; // in foo

是否有任何技术原因,语法的不存在性,使所有foo::bar::f可访问foo::g

using bar::f as g; 
// or in line with using declarations for types:
using g = bar::f;

或者有这样的事情甚至被考虑但被拒绝了?(为什么?)



1> Columbo..:

N1489:

可以将类别和命名空间之外的别名概念概括为函数,变量等.我们没有看到这样做的充分好处,可以想象严重过度使用会导致混淆使用哪些函数和变量.因此,我们不建议本节中提到的概括.此外,我们不打算进一步研究这些概括,除非有人提出表明重要用途的例子.



2> TartanLlama..:

我想不出任何技术原因,我认为这是一个合适的(非冲突)语法和一个非常重要的用例的问题.

目前有一个标准提议是为语言添加函数别名以支持opaque typedef.根据那篇论文,这个特征以前在90年代初考虑过,但被拒绝了:

Stroustrup在他的D&E书中将[函数别名]描述为在解决由于多重继承引起的名称冲突的上下文中的"重命名"特性:"这个概念的语义很简单,实现很简单; 问题似乎是要找到一个合适的语法."他说这样的提议"是在1990年的西雅图标准会议上提出的",虽然最初有"绝大多数",但这个特征最终没有被采纳: "在下次会议上,...我们同意这种名称冲突不太可能足以保证单独的语言功能."

建议的语法如下:

template< class RA, class R = std::less<> >
void
sort( RA b, RA const e, R lt = {} )
{
    using operator<() = lt; // operator < has type R
    // Remaining code in this scope uses infix < in place of calls to lt().
    // (A future proposal may suggest synthesis of other relational
    // operators from an operator< declared in this fashion.)
}

参加最近的标准会议的人也许可以权衡对提案的反应.

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有