C++ 访问嵌套类的私有成员

2024-06-26

标题可能有点误导。我有以下问题:我有一棵由叶子和内部节点组成的树。用户应该能够在叶子中存储任何信息and该树有一些方法可以获取一组用户定义的值,并且需要在恒定时间内(未摊销)访问相应的叶子。

我提出了以下想法,但它不起作用,因为不幸的是我无法访问嵌套类的私有成员:用户创建树and也为每个叶子一个实例UserElement其中包含相应叶子的用户定义值。一旦调用像 doSomethingWithTheTree(list>) 这样的方法并构建树,树就会创建相应的叶子并将其保存在私有字段中leaf。每当用户想要调用一个方法,其中一些叶子与其用户定义的值相对应时,他/她只需通过给出相应的值来调用该方法UserElements 和树可以在常数时间内检索到相应的叶子。

class Tree {
    public:
        template <typename T>
        class UserElement {
            private:
                T user_value;
                tree_node* leaf; // this has to be private for
                                 // everyone outside the class `Tree`
            public:
                T getInf() {
                    return user_value;
                }
                void setInf(T i) {
                    user_value = i;
                }
        };

        void doSomethingWithTheTree(list<UserElement<T>> elements) {
            ...
            // I want to be able to access elem.leaf for all elements
        }
}

从技术上来说,这是一个嵌套类(在另一个类中声明),而不是subclass(从其超类继承)。

您可以通过将 Tree 类设为友元来允许它访问其私有:

class UserElement {
    friend class Tree;
    // ...
};

或者,为了更好的封装,您可以限制仅访问需要它的成员函数,尽管由于需要以正确的顺序声明事物而变得有点混乱:

class Tree {
public:
    // Declare this so we can declare the function
    template <typename T> class UserElement;

    // Declare this before defining `UserElement` so we can use it
    // in the friend declaration
    template <typename T>
    void doSomethingWithTheTree(list<UserElement<T>> elements) {
        elements.front().leaf;
    }

    template <typename T>
    class UserElement {
        // Finally, we can declare it a friend.
        friend void Tree::doSomethingWithTheTree<T>(list<UserElement<T>>);
        // ...
    };
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 访问嵌套类的私有成员 的相关文章

  • 如何重写实体数据模型创建的对象上的 Equals?

    我创建了一个实体数据模型 它从 SQLite 数据库中提取记录 其中一个表是 People 我想重写 person Equals 方法 但我不确定去哪里进行这样的更改 因为 Person 对象是自动生成的 我什至看不到该 autogen 代
  • 在 2 个 .c 文件之间共享函数

    dir1有dir2 file1 c和file1 h dir2 有 file2 c 现在 如果我想在 file2 c 中访问 file1 c 中定义的函数 我需要在 file1 h 中声明它并在 file2 c 中包含 file1 h 这是一
  • OWIN AuthenticationOptions 在 mvc5 应用程序中运行时更新

    Hi 情况如下 我在 iis 7 上有一个带有 Identity 2 的 MVC 5 应用程序 该应用程序为多个网站提供服务 主机名是某些网站的关键 网站 另一个网站 等等 我决定在我的所有网站上使用谷歌外部登录 每个网站都应该是带有个人
  • 带方括号的 Uri.EscapeUriString

    这是一个奇怪的问题 但让我们看看它会得到什么样的回应 如果我编写一个控制台应用程序 VS 2013 NET 4 5 1 并执行这行代码 Uri EscapeUriString 我明白了 但是 如果我执行同样的事情 嗯 从技术上来说Uri E
  • 在子目录中构建共享库

    我正在尝试构建一个使用一些 C 代码的 R 包 我有一个编译为可执行文件的 C 库 可以从命令行调用 有一个与之关联的 Makefile 我正在尝试获取信息here http cran r project org doc manuals R
  • 如何将 CroppedBitmap 转换为 BitmapImage

    我正在尝试将 CroppedBitmap 转换为 BitmapImage 编辑 不使用内存流 我尝试过直接转换它 似乎这不是一个选择 这应该没那么难 我正在尝试剪切 BitmapImage 的一部分 并创建一个仅包含新裁剪的 Bitmap
  • 在异步方法中使用时 HttpClient 标头被清空

    我正在使用 NET Framework 4 6 1 我的 Web api 中有一个控制器 其中有静态 HttpClient 来处理所有 http 请求 在 IIS 上托管我的应用程序后 大约每月一次 我的应用程序的所有传入请求都会出现以下异
  • C# Visual Studio 动态代码片段

    我正在开发一个 WinForms 项目 每天都会执行一些重复性的任务 所以我认为创建代码片段 https msdn microsoft com en us library ms165394 v vs 110 aspx会帮助我 但它仅适用于固
  • 如何在 C++ 中从模板基类的构造函数调用模板超类的构造函数?

    我正在使用 sublimetext3 用 c 进行编程 我的程序有一个名为 Array 的超类和一个名为 IntArray 的子类 这两个类都是模板类 目前 我在编译该程序时遇到问题 它不断在我的 IntArray cpp 文件中给出错误
  • 如何将 QSerialPort 模块添加到 CMake 中?

    我想将 QSerialPort 模块添加到 CMake 中 根据我的理解 我需要将QT 串口添加到 pro中 我只想使用 CMake 所以我尝试编译简单的 CMake 文件 但有错误 QtCore 正在工作 qDebug 可以毫无问题地显示
  • ObjectTrackingEnabled 和 linq-to-sql

    I read here http www sidarok com web blog content 2008 05 02 10 tips to improve your linq to sql application performance
  • 如果 .txt 文件不存在,则创建一个,如果存在则追加新行

    我想创建一个 txt 文件并写入它 如果该文件已经存在 我只想添加更多行 string path E AppServ Example txt if File Exists path File Create path TextWriter t
  • 如何在 WCF 中反序列化自定义 SOAP 标头?

    我正在尝试向通过 WCF 的所有 SOAP 请求添加自定义标头 我发现这篇精彩的文章 http blogs msdn com b mohamedg archive 2012 10 21 adding custom soap headers
  • 解析通过asp:FileUpload上传的XML文件

    我有一个场景 用户将上传 XML 文件 我想将该文件添加到数据库中的表中 不过 困难的部分是我需要解析文件 然后将一些信息添加到一些不同的表中 显示如何获取 XML 文件的每个示例都使用 URI 来获取文件 但是如何直接从数据库获取文件 或
  • 没有类型的 IEnumerable 属性

    我正在尝试创建一个类似于来自 MSDN 的官方 DataGrid ItemsSource 的属性 public IEnumerable ItemsSource get set 这提供了对任何派生类中任何类型的支持 有了这个 我可以设置类似的
  • Subsonic 3 ActiveRecord 嵌套选择导致 NotIn 错误?

    我有以下 Subsonic 3 0 查询 其中包含嵌套的 NotIn 查询 public List
  • 如何进行平衡组捕获?

    假设我有这个文本输入 tes tR R abc aD mnoR xyz 我想提取 ff 输出 R abc R xyz D mnoR xyz R R abc aD mnoR xyz 目前 我只能使用平衡组方法提取组内的内容 如中所示msdn
  • 使用反射检测属性的访问修饰符类型

    我编写了一些代码来使用反射查看属性 我已经使用反射从类中检索了属性列表 但是我需要查明该财产是公共的还是受保护的 例如 public string Name get set protected int Age get set Propert
  • RC4 实现与 openssl 输出不匹配

    我的目标是在 C C 中实现 RC4 流密码 并确保它产生与使用时相同的输出openssl命令 按照伪代码维基百科 https en wikipedia org wiki RC4 该实现似乎有效 因为它可以加密和解密内容 但是 加密的输出与
  • 定义Python类时,如何在其中设置随机变量?

    假设我有一个名为Person 其中只有该人的姓名和性别 性别应从男性和女性中随机选择 为此 我导入random randint 功能 根据随机int确定随机性别 import random class Person alias random

随机推荐

  • gmap.js 覆盖层上的 MouseOver 事件?是否可以?

    我在用着gmap js http hpneo github io gmaps examples html我正在尝试在我创建的覆盖标记上创建鼠标悬停事件 这是一个 jsFiddle gt http jsfiddle net LXv87 htt
  • 在vim中显示单个空格不可见字符

    我已经添加了set listchars tab trail extends nbsp 用于显示不可见的字符 它适用于制表符扩展 但不适用于 nbsp 我已阅读以下帮助 set listchars并尝试了那里给出的示例 但我仍然没有得到单空格
  • WinDbg 的好教程吗?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 有没有好的教程来展示如何使用WinDbg http en wikipedia org w
  • +process 中的加号是 Node.js 域文档中的拼写错误吗?

    在本文档中 http nodejs org api domain html http nodejs org api domain html 这一行出现 var PORT process env PORT 1337 加号是拼写错误吗 如果不是
  • 如何使用 ASP.NET Core 设置 EF6 迁移

    我正在尝试采用吉米 博加德的Contoso大学核心项目 https github com jbogard ContosoUniversityCore 我想先进行代码迁移 但不确定如何正确设置它 我将 Migrator EF6 Tools 添
  • LoggerFactory.getLogger(ClassName.class) 与 LoggerFactory.getLogger(this.getClass().getName())

    我正在努力提高我的 Java 优化技能 为了实现这一目标 我制作了一个旧程序 并且正在尽力使其变得更好 在此程序中 我使用 SL4J 进行日志记录 为了获取记录器 我做了 private static final Logger logger
  • 带点符号的 Typescript 深度省略

    由于 TypeScript 现在支持模板文字类型 是否可以有类似以下内容 interface Data a number b c number d number type OmitDeep
  • 使用 ADB 更改 Android 壁纸?

    我想知道是否可以使用我的笔记本电脑从 ADB 更改 Android 壁纸 我不知道是否存在任何命令 或者我是否需要将图片复制到文件夹或编辑文本文件 如果可以的话 我需要通过 ADB 解决这个问题 谢谢大家 您只需要启动正确的壁纸设置意图 由
  • python33如何使用nltk3?

    我成功安装了 NLTK 2 0 4 但是当我尝试下载 NLTK 软件包时 即 nltk download stopwords 它不起作用 所以我尝试为 python 3 安装 NLTK 的更新版本 但它给出了此错误 gt gt gt imp
  • 清除指针向量[重复]

    这个问题在这里已经有答案了 假设我定义了一个这样的类 class foo private std vector lt int gt v public void bar1 for int i 0 i lt 10 i int a new int
  • 通过 Scriptaculous 拖放防止 JavaScript 点击事件

    我的页面上有一些可拖动的元素 这些相同的元素有一个导航到另一个页面的点击事件 我试图确定在用户拖动时防止触发单击事件的最佳方法 但如果不拖动则仍然允许单击事件 有人对实现这一目标的最佳方法有任何想法吗 我通过使用类似以下内容解决了这个问题
  • JS 导入模块并在页面加载时运行

    我想使用 html onload 事件和从另一个 generateObject js 文件导入的 console log 文本来调用我的函数 main 但是当我导入函数时 onload 事件停止工作并且函数 main 不再使用 html 生
  • /bin/bash: ./scripts/script.sh: 运行时没有这样的文件或目录 ./byfn.sh -m up Hyperledger Fabric

    我是区块链新手 我正在阅读教程http hyperledger fabric readthedocs io en latest build network html http hyperledger fabric readthedocs i
  • 我想知道像tineye.com这样的反向图像搜索服务是如何工作的......?

    像 TinEye 这样的反向图像搜索引擎如何工作 我的意思是进行图像搜索需要哪些参数 不知道 TinEye 是否使用这个 但是SURF http en wikipedia org wiki SURF是用于此目的的常用算法 在这里您可以看到一
  • 有没有办法将字母扩展到超过 26 个字符,例如 AA、AB、AC...?

    我大部分时间都使用字母来表示我的因素 但今天我尝试超过 26 个字符 LETTERS 1 32 期待有自动递归因式分解 AA AB AC 但很失望 这只是字母的限制还是有办法使用其他函数来获取我正在寻找的内容 702够吗 LETTERS70
  • iPad 上的 UITableView 背景颜色始终为灰色

    当我设置backgroundColor for my UITableView它在 iPhone 设备和模拟器 上运行良好 但在 iPad 模拟器上运行不佳 相反 我设置的任何颜色都会有浅灰色背景 包括groupTableViewBackgr
  • Android 应用程序中最用户友好的布局选项

    所以我面临的问题不是主观判断什么对用户最好 我认为 而是有哪些选项可以用来说明定位 Think of some sort of team sports app where you can put little dots for player
  • jQuery 移动按钮保持按下状态

    我有一个连接到 ajax POST 的 jQuery 移动按钮 如果 POST 失败 jQuery 移动按钮将保持按下状态 而不是 弹出 有什么想法吗 这很容易做到 Here a jsFiddle为我之前的答案之一制作的示例 http js
  • 模拟器中的 Wp8 应用程序部署错误 0x81030110

    I was developed wp8 app and signed my app with enterprise certificate using powershell After successfully signed and i w
  • C++ 访问嵌套类的私有成员

    标题可能有点误导 我有以下问题 我有一棵由叶子和内部节点组成的树 用户应该能够在叶子中存储任何信息and该树有一些方法可以获取一组用户定义的值 并且需要在恒定时间内 未摊销 访问相应的叶子 我提出了以下想法 但它不起作用 因为不幸的是我无法