派生模板类对基类成员数据的访问

2024-01-12

这个问题是对以下问题的进一步推进这个线程 https://stackoverflow.com/questions/1117693/initializing-template-base-class-member-types-in-derived-class-initializer-lists.

使用以下类定义:

template <class T>
class Foo {

public:
    Foo (const foo_arg_t foo_arg) : _foo_arg(foo_arg)
    {
        /* do something for foo */
    }
    T Foo_T;        // either a TypeA or a TypeB - TBD
    foo_arg_t _foo_arg;
};

template <class T>
class Bar : public Foo<T> {
public:
    Bar (const foo_arg_t bar_arg, const a_arg_t a_arg)
    : Foo<T>(bar_arg)   // base-class initializer
    {

        Foo<T>::Foo_T = T(a_arg);
    }

    Bar (const foo_arg_t bar_arg, const b_arg_t b_arg)
    : Foo<T>(bar_arg)
    {
        Foo<T>::Foo_T = T(b_arg);
    }

    void BarFunc ();

};

template <class T>
void Bar<T>::BarFunc () {
    std::cout << _foo_arg << std::endl;   // This doesn't work - compiler error is: error: ‘_foo_arg’ was not declared in this scope
    std::cout << Bar<T>::_foo_arg << std::endl;   // This works!
}

当访问模板类的基类的成员时,似乎我必须始终使用以下模板样式语法显式限定这些成员Bar<T>::_foo_arg。有办法避免这种情况吗? “using”语句/指令可以在模板类方法中发挥作用来简化代码吗?

Edit:

通过使用 this-> 语法限定变量来解决范围问题。


您可以使用this->明确您指的是班级成员:

void Bar<T>::BarFunc () {
    std::cout << this->_foo_arg << std::endl;
}

或者,您也可以使用“using”方法中:

void Bar<T>::BarFunc () {
    using Bar<T>::_foo_arg;             // Might not work in g++, IIRC
    std::cout << _foo_arg << std::endl;
}

这使编译器清楚地知道成员名称取决于模板参数,以便它在正确的位置搜索该名称的定义。欲了解更多信息,另请参阅C++ Faq Lite 中的此条目 https://isocpp.org/wiki/faq/templates#nondependent-name-lookup-members.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

派生模板类对基类成员数据的访问 的相关文章

  • 如何在 DataColumn.Expression 中使用 IF/ELSE 或 CASE?

    我有一个包含 1 列的表 状态 我想添加另一列名为 Action 的列 其值如下 如果 Status Yes 则 Action Go 否则 Action Stop 我使用以下代码添加到 操作 列中 但它不起作用 myDataTable Co
  • 有没有快速创建集合的方法?

    目前我正在创建一个像这样的新集 std set a s s insert a1 s insert a2 s insert a3 s insert a10 有没有办法创建s在一行 int myints 10 20 30 40 50 std s
  • 在 C# 中按元素相乘数组具有意想不到的性能

    我想找到按元素相乘两个数组的最佳方法 这是更广泛项目的一部分 其中性能而不是唯一的考虑因素 我今天开始用 C Linqpad 编写一些函数 因此它还没有以任何方式进行优化 下面代码的输出如下 Environment ProcessorCou
  • 更改 Qt OpenGL 窗口示例以使用 OpenGL 3.3

    我正在尝试更改 Qt OpenGL 示例以使用更现代的 opengl 版本 330 似乎合适 所以我做了 在 main cpp 上设置版本和配置文件 设置着色器版本 更改着色器以使用统一 它现在构建没有任何错误 但我只看到一个空白窗口 我错
  • JavaScript 原型 - 请澄清

    有人可以帮我理解原型属性吗 我不明白原型属性是函数的属性还是函数内部的属性 假设我们创建以下构造函数 Food 此时 函数 Food 具有 Food prototype 属性 由于 Food 是 Object 的实例 因此这意味着 Obec
  • 防止 boost::asio::io_context 在空轮询调用时停止

    此代码调用发布的句柄 boost asio io context ioc boost asio post ioc std cout lt lt lol lt lt std endl ioc poll 而这并没有 boost asio io
  • 如何在 C# 控制台应用程序中将修饰符(ctrl、alt、shift)按键捕获为单个按键?

    Console ReadKey 仅在按下 正常 键时捕获输入 然后将修饰符 如果有 附加为键信息的一部分 如何将单个修饰键注册为输入 提供了一种解决方案这个链接 https blogs msdn microsoft com toub 200
  • vs2008 c#:Facebook.rest.api如何使用它来获取好友列表?

    如何在此基础上取得进一步的进步 获取好友列表的下一步是什么 string APIKey ConfigurationManager AppSettings API Key string APISecret ConfigurationManag
  • 如何获取 QTableView 的标题列表?

    我有一个QTableView我的对话框中的对象 我需要访问该表的水平标题并将它们放入QStringList object 尽管进行了大量搜索 但我在 Qt 文档中找不到如何获取此标头列表 编辑 我发现的最接近的地方是this https w
  • 单例模式和 std::unique_ptr

    std unique ptr唯一地控制它指向的对象 因此不使用引用计数 单例确保利用引用计数只能创建一个对象 那么会std unique ptr与单例执行相同 单例确保只有一个实例属于一种类型 A unique ptr确保只有一个智能指针到
  • 在 JSQMessagesViewController 中显示 LocationMediaItem

    我刚刚尝试实施LocationMediaItem in my Xamarin iOS应用程序使用JSQMessagesViewController 一切都很顺利 唯一的问题是UICollectionView应该显示位置的单元格永远停留在加载
  • 给出 5 个参数,但在终端中只得到 3 个参数

    我想将一个文件传递给一个c 程序 如果我在 IDE 中执行此操作 test string string lt test txt return argc 5 但在终端上我刚刚得到argc 3 看来 这是因为 什么是 lt 意思是 我正在使用
  • 是否有相当于 Clang/LLVM 的 .spec 文件,在哪里可以找到参考?

    The gcc驱动程序可以配置为使用特定的链接器 特定的选项和其他细节 例如覆盖系统头 specs files 当前 截至撰写本文时 GCC 版本 4 9 0 的手册此处描述了规范文件 https gcc gnu org onlinedoc
  • C# 中的 strstr() 等效项

    我有两个byte 我想找到第二个的第一次出现byte 在第一个byte 或其中的一个范围 我不想使用字符串来提高效率 翻译第一个byte to a string会效率低下 基本上我相信就是这样strstr 在 C 中做 最好的方法是什么 这
  • 我可以让 ungetc 取消阻止阻塞的 fgetc 调用吗?

    我想在收到 SIGUSR1 后使用 ungetc 将 A 字符重新填充到标准输入中 想象一下我有充分的理由这样做 调用 foo 时 stdin 中的阻塞读取不会被收到信号时的 ungetc 调用中断 虽然我没想到它会按原样工作 但我想知道是
  • cout 和字符串连接

    我刚刚复习了我的 C 我尝试这样做 include
  • 跨多个域的 ASP.NET 会话

    是否有合适的 NET 解决方案来在多个域上提供持久服务器会话 即 如果该网站的用户在 www site1 com 下登录 他们也将在 www site2 com 下登录 安全是我们正在开发的程序的一个问题 Thanks 它是否需要在会话中
  • QFileDialog::getSaveFileName 和默认的 selectedFilter

    我有 getSaveFileName 和一些过滤器 我希望当用户打开 保存 对话框时选择其中之一 Qt 文档说明如下 可以通过将 selectedFilter 设置为所需的值来选择默认过滤器 我尝试以下变体 QString selFilte
  • 使我的 COM 程序集调用异步

    我刚刚 赢得 了在当前工作中维护用 C 编码的遗留库的特权 这个dll 公开使用 Uniface 构建的大型遗留系统的方法 除了调用 COM 对象之外别无选择 充当此遗留系统与另一个系统的 API 之间的链接 在某些情况下 使用 WinFo
  • 从 JavaScript 中的 OnClientClick 事件中阻止 C# 中的 asp:Button OnClick 事件?

    我有一个asp Button在我的网页上 它调用 JavaScript 函数和代码隐藏方法 后者进行调用以导航到另一个页面 在 JavaScript 函数中 我正在检查条件 如果不满足这个条件 我想中止导航 以便OnClick方法未被调用

随机推荐

  • 使用 ffmpeg 逐帧写入视频

    我正在尝试使用 ffmpeg 逐帧编写视频 如下所述 http zulko github io blog 2013 09 27 read and write video frames in python using ffmpeg http
  • 转换 Spark 数据框中的日期模式

    我在 Spark 数据框中有一列字符串数据类型 日期采用 yyyy MM dd 模式 我想以 MM dd yyyy 模式显示列值 我的数据是 val df sc parallelize Array steak 1990 01 01 2000
  • 如何使用 python 从 xml 中提取特定数据?

    我对 python 比较陌生 我一直在尝试通过实践方法学习Python 我通过做euler项目学习了c c 现在我正在学习如何从文件中提取数据 我已经掌握了从简单文本文件中提取数据的窍门 但我有点陷入 xml 文件中 我试图做的一个例子 我
  • Django -vs- Grails -vs-?

    我想知道是否有类似 Django 的简单 Web 应用程序开发与良好的部署 调试和其他工具相结合 Django 是一个非常高效的框架 用于构建内容丰富的网站 与 Java 中的一些怪物相比 这是我尝试过的最好的 呼吸新鲜空气 然而它是用 P
  • 用地址而不是数字填充队列

    我想知道是否可以将地址而不是其内容推送到队列中 例如 我有一个二维数组 我正在围绕它移动 我想记录我去过的地方 但我不一定关心这些地方的内容 是的 您只需将队列声明为指针队列 例如 int 或您正在使用的任何类型 这是代码 include
  • 如果浮点范围更大,通过浮点的往返是否始终定义行为?

    假设我有两种算术类型 一种是整数类型 I 和一个浮点数 F 我还假设std numeric limits i max 小于std numeric limits i
  • 更新现有的 Yaml 文件

    我想更新我现有的user yaml文件而不擦除其他对象或属性 我已经用谷歌搜索了两天寻找解决方案 但没有运气 实际输出 name Test User age 30 address line1 My Address Line 1 line2
  • M1 MBP Rails db:create 引发 msgpack 错误

    您好 我是 Ruby on Rails 新手 当我跑步时rails db create 在M1 MBP上运行时出现以下错误 Library Ruby Gems 2 6 0 gems msgpack 1 4 2 lib msgpack rb
  • (简单)允许 24:00:00 和 00:00:00 作为输入的日期格式

    我已经寻找这个有一段时间了 到目前为止还没有成功 你知道是否有一个 DateFormat 这样的类 它允许我使用 00 00 00 和 24 00 00 作为输入参数 它们都是午夜 但是当调用 getHour 时 结果我会得到 0 或 24
  • 避免调用 Floor()

    我正在编写一段代码 需要处理不一定在 0 到 1 范围内的 uvs 2D 纹理坐标 例如 有时我会得到 u 分量为 1 2 的 uv 为了解决这个问题 我正在实现一个包装 通过执行以下操作来导致平铺 u floor u v floor v
  • gcc -save-temps:如何指定目录

    是否可以指定输出目录 save temps https gcc gnu org onlinedocs gcc Developer Options html Developer Options文物 我知道我可以做一个mv之后但想知道是否有办法
  • NuGet Uninstall.ps1 - 删除项目引用

    因此 在我的 Install ps1 中 我可以添加如下引用 param installPath toolsPath package project project Object References Add YourDLL 如何在 Pow
  • 如何在 R 中查找和求和多列

    假设我有 2 个数据帧 结构如下 GROUPS P1 P2 P3 P4 123 213 312 231 345 123 213 567 个人结果 ID SCORE 123 23 213 12 312 11 213 19 345 10 567
  • 让 Xcode 识别不带“.h”扩展名的 C++ 头文件 (OpenSceneGraph)

    OpenSceneGraph 使用头文件没有 h 扩展名 http www openscenegraph org projects osg wiki Support FAQ WhydonttheOSGheaderfileshavea hor
  • 将双精度型转换为整数何时是未定义的行为

    所以如下 double t 244 233 int a int t 不是未定义的行为 因为 244 可以容纳在里面int我做对了吗 否则 如果它是更大的值而不是 244 它不适合 int 这将是未定义的 我做对了吗 我更感兴趣的是 C 是如
  • 无法启动 Selenium 会话:无法启动新的浏览器会话:启动浏览器时出错

    我像这样初始化硒 public void setUp throws Exception setUp http localhost firefox 我用类似的方法编写测试 public void testUntitled throws Exc
  • 使用应用函子对选项列表求和

    我有一个 List Option Int 并想使用应用函子对其进行求和 从 1 我了解到它应该类似于以下内容 import scalaz import Scalaz List 1 2 3 map some foldLeft some 0 c
  • Rails:论坛类网站中用户->帖子->评论模型的最佳关联模型?

    我正在创建一个论坛网站 每个注册用户都可以在其中撰写许多帖子并每个帖子可以有很多评论 此外 每个用户都可以对任何其他用户创建的任何帖子发表评论 has many has many user gt Posts gt Comments has
  • 我如何有效地使用 angularjs 并牢记安全性?

    当我知道它们不安全时 为什么我应该使用 angular js 或其他类似的 js 框架 我所说的安全性是指 所有代码都是用纯 JavaScript 编写的 可以在 devtools 或 firebug 中编辑 javascript 像表单提
  • 派生模板类对基类成员数据的访问

    这个问题是对以下问题的进一步推进这个线程 https stackoverflow com questions 1117693 initializing template base class member types in derived