能够使用函数指针调用外部类的私有方法

2023-12-21

基于以下answer https://stackoverflow.com/questions/27536395/passing-pointer-to-member-func-of-outer-class-template-to-nested-class/27536576#27536576到最近的question https://stackoverflow.com/questions/27536395/passing-pointer-to-member-func-of-outer-class-template-to-nested-class,我可以使用函数指针来调用私有方法Foo<T>::foo()来自另一个班级Bar,如下所示(另见ideone http://ideone.com/IDsmgY)

#include <iostream>

template<typename T>
struct Bar
{
    typedef void (T::*F)();

    Bar( T& t_ , F f ) : t( t_ ) , func( f )
    {
    }

    void operator()()
    {
        (t.*func)();
    }

    F func;
    T& t;
};

template<typename T>
class Foo
{
private:
    void foo()
    {
        std::cout << "Foo<T>::foo()" << std::endl;
    }

public:    
    Foo() : bar( *this , &Foo::foo ) 
    {
        bar();
    }

    Bar<Foo<T> > bar;
};

int main()
{
    Foo<int> foo;
}

这适用于 MSVC 2013 和 GCC 4.8.3。有效吗?


C++ 标准说

11.1 类的成员可以是
(1.1)——私人;也就是说,它的名称只能由声明它的类的成员和友元使用。

即访问说明符应用于名称,而不是可执行代码。如果您考虑一下,这是有道理的,因为访问说明符是编译时构造。

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

能够使用函数指针调用外部类的私有方法 的相关文章

  • 删除字符串 C 的第一个字符

    我试图删除字符串的第一个字符并保留其余部分 我当前的代码无法编译 我对如何修复它感到困惑 My code char newStr char charBuffer int len strlen charBuffer int i 1 char
  • 如何使用 ASP.NET MVC 进行 HTTP 调用?

    我正在尝试做的事情 我试图练习进行 HTTP 调用 如果这就是它的名字 来自一个简单的 ASP NET MVC Web 应用程序 为此 我尝试从以下位置获取天气详细信息打开天气地图 http openweathermap org appid
  • 用 C# 启动 Windows 服务

    我想启动一个刚刚安装的Windows服务 ServiceBase ServicesToRun if bool Parse System Configuration ConfigurationManager AppSettings RunSe
  • 中间件 API 的最佳实践是什么? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我们正在开发一个中间件 SDK 采用 C 和 Java 语言 供游戏开发人员 动画软件开发人员 阿凡达开
  • OpenCV Visual Studio ntdll.dll

    我尝试在 Visual Studio 2013 上使用 OpenCV 2 4 10 创建一个项目 但由于以下异常 到目前为止我运气不佳 请建议帮助 TIA letstryitonemoretime exe Win32 Loaded C Us
  • C++ 中的单例和抽象基类

    最近我遇到了关于实现 Singleton 但涉及抽象基类的问题 假设我们有这样的类层次结构 class IFoo it s ABC class Foo public IFoo 我们的单例类定义如下 template
  • 避免集合已修改错误

    Issue 我有以下代码 foreach var ItemA in GenericListInstanceB ItemA MethodThatCouldRemoveAnyItemInGenericListInstanceB 显然我得到一个错
  • 如何“杀死”Pthread?

    我正在学习 Pthreads 并且想知道杀死这样一个对象的最佳方法是什么 在寻找类似的问题后 我无法找到 明确 的答案 但请随时向我指出任何相关问题 我正在使用一个小型客户端服务器应用程序 其中服务器主线程正在侦听套接字上的客户端连接 每次
  • C++ 非类型参数包扩展

    我正在编写由单一类型参数化的模板函数 并且具有可变数量的相同类型 而不是不同类型 的参数 它应该检查第一个值是否在其余值中 我想这样写 include
  • 异步方法中的异常未被捕获

    下面的代码没有捕获我的OperationCancelEException 它是通过调用抛出的ct ThrowIfCancellationRequested public partial class TitleWindow Window IA
  • 'goto *foo' 其中 foo 不是指针。这是什么?

    我正在玩标签作为值 https gcc gnu org onlinedocs gcc Labels as Values html并最终得到这段代码 int foo 0 goto foo 我的 C C 经验告诉我 foo means dere
  • Azure 2012 年 10 月 SDK 损坏 UseDevelopmentStorage=true

    有人尝试过使用 usedevelopmentstorage true 连接字符串的 2012 年 10 月 Azure sdk 吗 CloudStorageAccount Parse UseDevelopmentStorage true 抛
  • Qt mouseReleaseEvent() 未触发?

    我有一个显示图片的库 我们称之为 PictureGLWidget 其中 class PictureGLWidget public QGLWidget 所以 PictureGLWidget 扩展了 QGLWidget 在PictureGlWi
  • System.diagnostics.process 进程在托管后无法在 IIS 上运行?

    我正在尝试从网络应用程序安装 exe 当我在本地运行应用程序 从 asp 开发服务器 时 它安装正确 但当我托管在 IIS 上时 它不起作用 我在asp net页面的Page load方法上编写了这段代码 想要在客户端计算机上安装Test
  • 如何从代码隐藏中向我的 div 添加点击事件?

    如何从代码隐藏中向我的 div 添加点击事件 当我点击 div 时 会出现一个消息框 其中显示 您想删除它吗 并在框中显示 是 或 否 全部来自后面的代码 while reader Read System Web UI HtmlContro
  • 如何解释“错误C2018:未知字符'0x40'?[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 在编译一些代码时 我收到以下信息 错误 C2018 未知字符 0x40 我想知道如何解决这样的问题 这是我要开始的地方
  • C 中什么函数可以替换字符串中的子字符串?

    给定一个 char 字符串 我想查找所有出现的子字符串并将其替换为备用字符串 我没有看到任何简单的函数可以实现这一点
  • 如何将 Metro 应用部署到桌面?

    我正在尝试将我的 C 应用程序部署到我的 Windows 8 Metro 桌面 我可以在 bin 文件夹中看到部署的文件 但是当我尝试打开它们时 出现以下错误 该应用程序只能在 AppContainer 的上下文中运行 我检查了属性上下文菜
  • 编译器可以报告未知属性的错误吗?即使有范围?

    在N3291 7 6 1 3 5 属性语法和语义 decl attr grammar 关于如何属性是用我读过的源代码写的 使用一个属性范围令牌是有条件支持的 实现定义的行为 and For an 属性标记本国际标准中未指定 该行为是实现定义
  • 具有多种类型的 C# 泛型类型推断

    我有以下通用方法 用于将一种类型的输入对象序列化为超类型 如下所示 public string SerialiseAs

随机推荐

  • vue 实例和 vue 组件之间的区别?

    我是vue js新手 在学习时有一些疑问 我现在对其实例和组件之间的关系有点困惑 据我所知 vue 构建的每个应用程序都应该只有一个实例 并且只有一个实例 如果需要 它可以有任意多个组件 但最近我看到了一个演示 在该演示中它有多个实例 所以
  • org.gdal.ogr.ogrJNI.GetDriverCount() 引起的 UnsatisfiedLinkError

    我正在 Windows 7 上使用 Eclipse Luna 使用 Java 进行开发 我正在将 gdal 用于某些 ogr 进程 并且从 eclipse 运行该应用程序没问题 但在同一台计算机上从命令行运行会遇到问题 我得到以下信息 Ca
  • Google App Engine Python、virtualenv 和 mimetypes

    我有使用 djangoappengine 构建并在 App Engine 开发服务器下运行的工作项目 所以我运行 manage py runserver 并且一切正常 所有需求 django djangoappengine 等 都位于项目根
  • igraph 和 tnet 之间中心性度量的差异

    我正在尝试获取有向加权网络的中心性度量 我一直在使用igraph and tnet包在R 然而 我发现使用这两个包获得的结果存在一些差异 并且我对这些差异的原因有点困惑 见下文 require igraph require tnet set
  • Android Studio 卡在“下载组件”上

    我已经安装了 android studio 当我想下载像sdk经理等 我被困在这里 像这样 我遇到了完全相同的问题 在反复看到这些不具有描述性的下载后 我感到沮丧 此外 在高速互联网上下载也需要花费大量时间 只需等待它就会完成
  • AlertController 不在窗口层次结构中

    我刚刚使用 ViewController 类创建了一个单视图应用程序项目 我想从位于我自己的类中的函数显示 UIAlertController 这是我的带有警报的班级 class AlertController UIViewControll
  • 将 DLL 拖放到 Windows Server 2008 .net 4.0 中的 GAC(“程序集”)

    我试图将一些代码部署到客户端计算机 但我不想在客户端计算机上安装 MS Windows SDK 工具 这意味着无权访问 gacutil 我还没有为我的代码创建安装程序 看起来这可能是 net 4 0 中仅有的两个选项 在过去 我只需启动 运
  • 在自定义 ViewModel 中重用验证属性

    当我开始使用时xVal http xval codeplex com 对于客户端验证 我仅实现使用域模型对象作为视图模型或视图模型中这些对象的嵌入实例的操作方法 这种方法在大多数情况下都可以正常工作 但在某些情况下 视图需要仅显示和回发模型
  • 如何禁用 tableView 中表列的重新排序?

    试图弄清楚如何禁用 javafx 2 中表列的重新排序 这是解决方案 tblView getColumns addListener new ListChangeListener Override public void onChanged
  • 找不到元素“beans”的声明

    我有弹簧罐spring 3 2 0 RC1 jar并试图实施Apache ActiveMQ helloWorld给出的教程中的程序here http icodingclub blogspot com 2011 07 introduction
  • 如何获取枚举的数值?

    假设你有 public enum Week SUNDAY MONDAY TUESDAY WEDNESDAY THURSDAY FRIDAY SATURDAY 一个人怎样才能得到int表示星期日是 0 星期三是 3 等 Week week W
  • 静态库依赖项在 Xcode 3.2.3 上的模拟器中编译,在设备上失败

    升级到 XCode 3 2 3 和 iPhone 3 2 4 0 SDK 在我的构建过程中引入了一个奇怪的错误 我有一个静态库 Compton 它本身依赖于 Three20 我将 Compton 构建为它所支持的客户端应用程序的依赖项 当我
  • MySQL POINT空间索引查询以中心POINT为半径范围内

    我看到许多解决方案可以从 a 中获取最近的行POINT转换为X and Y 并对距离进行三角计算 据我了解 这似乎没有利用空间索引 从最常见的意义上来说 如何利用空间索引 返回其空间索引的行POINT位于中心的半径范围内POINT 换句话说
  • NODEJS:立即发送文件和数据

    这就是我得到的 它工作得很好 但我希望能够在客户端登录我的网站时向他发送文件和数据 JSON 有什么办法可以结合起来吗 app get function req res res sendfile dirname index html 您无法
  • mysql联合结果中的错误列

    使用 union 时我得到了错误的列名称 这就是我所做的 我有两个非常大的表 具有相同的结构和不同的记录 所以就是这样 mysql gt select from e18 where 15 like car limit 1
  • Haskell 中 Idris 的 Fin 的首选替代方案是什么

    我想要一个可以包含 0 到 n 值的类型 其中 n 位于类型级别 我正在尝试类似的事情 import GHC TypeLits import Data Proxy newtype FiniteNat n FiniteNat toIntege
  • 在未右键单击并选择“以管理员身份运行”的情况下运行 WPF 应用程序时出现性能问题

    我有一个 WPF 应用程序 将在运行 Windows 10 的平板电脑上使用 在我的开发环境中 应用程序运行得非常快 但是 如果我在没有管理员权限的平板电脑上运行该应用程序 该应用程序响应非常慢 所有动画都很慢 滚动不流畅 并且触摸问题很明
  • 在react-native中打开另一个屏幕

    我在本机反应中有这个屏幕 import React Component from react import AppRegistry TouchableOpacity Text Button Image TextInput PropTypes
  • 如何访问 Oak/Deno 中的表单主体

    我用的是橡木 德诺 我有一个从提供的 ejs 文件提交的表单 如何访问表单主体 当我将其记录到控制台时 它会打印 type form value URLSearchParamsImpl 帖子处理程序如下所示 router post add
  • 能够使用函数指针调用外部类的私有方法

    基于以下answer https stackoverflow com questions 27536395 passing pointer to member func of outer class template to nested c