问题标签 [pointer-to-member]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
101 浏览

c++ - 使用指向成员的指针来读取 cons 对象字段的值

我正在尝试使用指向成员的指针获得对对象字段的只读访问权限,但是我收到“访问冲突读取位置...”错误。

我尝试将 const 限定符添加到字段定义中,但这没有帮助。

0 投票
1 回答
74 浏览

c++ - C++ 模板指向成员

我对 C++ 中的模板有理论问题。
假设我有以下代码:

代码

问题是:当我可以访问B::k时,为什么我不能访问B::c::val字段?B::c::val也是B的成员。或不?

0 投票
2 回答
73 浏览

c++ - 指向成员和静态变量的指针

为什么我不能有这样的成员指针

http://ideone.com/UabI61

我做错了什么?

0 投票
1 回答
238 浏览

c++ - 如何在指向 const 地址的同时声明成员函数 const 指针

我的意思是类似于const char* const p;or char const * const p;。这里p代表指向 const char 的指针,而指针本身也是 const。所以*p = 'a';char c = 'c'; p = &c;不会被遵守。

请有人告诉我如何声明一个指向成员函数的指针,它指向的内容和它本身都是 const,有和没有typedef.

在实践中不使用只是好奇。

不是我要问的。

0 投票
1 回答
123 浏览

c++ - 返回一个 std::function 包装的 lambda,它调用指向成员函数的指定指针

我有一个案例,我可以将一个 lambda 传递给 std::sort,我还可以通过调用一个函数来提供谓词,该函数返回一个包装相同 lambda 的 std::function,但是,如果我尝试调用一个类似的函数它允许我指定一个指向成员函数的指针,这可以编译但在运行时失败。

这有效:

这有效:

但这不起作用:

当我尝试以最后一种通用方式执行此操作并逐步通过调试器时,当 std::sort 调用谓词时,它会进入我上面所说的 ReturnGeneralPred ,并且 Func 似乎是未定义的,就好像它是本地的超出范围的变量。

目前,我可以通过失去一些通用性来获得相同的功能,但我想知道是否有办法完成我想做的事情。

0 投票
2 回答
101 浏览

c++ - 指向数据成员的指针数组

我可以有一个指向这样的数据成员的指针:

由于循环中的句柄成员,我需要一个这样的指针数组。这个怎么做。

0 投票
1 回答
107 浏览

c++ - 如何使指针指向模板化成员函数的特殊变体?

某个类中有一个模板化的成员函数Foo

如何制作指向此函数的以下特殊变体的 make 指针?

就像我的意思

0 投票
2 回答
403 浏览

c++ - Definition of an array of pointer-to-members in combination with variadic templates

In an embedded application, I'd like to create a helper class which holds a list of pointer-to-member-functions of a certain class, where the helper class calls the member functions in succession. At the moment, I'm having troubles with the definition statement of the static array which holds the pointers. This is the code:

Both Visual Studio 2013 and GCC 4.7.3 give errors on this line, where I'm trying to define the f variable, and initialize it with a list of the member function pointers:

GCC gives the following errors:

Visual Studio gives the following errors:

Moreover, Visual Studio gives an additional error one line later:

Is it even possible what I am trying to do? Is my code wrong, and is it fixable?

0 投票
4 回答
318 浏览

c++ - 从指针到成员的映射

(注意:如果这感觉像是 XY 问题,请滚动到分隔符下方,了解我是如何得出这个问题的)

我正在寻找一种方法来存储指向成员函数的指针(不同类型的)并比较它们是否相等。我需要存储一个从指针到成员函数到任意对象的映射,然后搜索这个映射。它不必是关联容器,线性搜索就可以了。另请注意,指针仅用作映射键,它们永远不会被取消引用。

我目前的方法是这样的:在构建映射时,我reinterpret_cast将传入的指向成员的指针指向一种众所周知的类型 ( void (MyClass::*)()) 并将其插入到映射中。像这样的东西(为简洁起见省略了错误检查):

然后在查找时,我执行相同的强制转换并按相等搜索:

但是,我不确定这是否会一直有效。虽然我相信它不会产生假阴性(两个相等的指针被报告为不同的),但我担心它可能会产生假阴性(原本不同类型的两个指针在转换为“普通”类型时可以比较相等)。所以我的问题是,是这样吗?或者我可以安全地使用这样的比较吗?

我知道我在这里危险地靠近 UB 领土。但是,我不介意使用标准未定义但已知可在 gcc 和 MSVC(我的两个目标编译器)中工作的行为的解决方案。

所以,问题是:普通类型中的比较安全吗?或者我最好将存储的指针转换为传入类型以进行比较(如下所示):

或者这些都不会在实践中起作用,我不走运?


鉴于我的实际任务和加深我对语言的理解,我对指向成员的指针的上述属性感兴趣。尽管如此,出于完整的感觉(如果有人知道更好的方法),这就是我如何得出最初的问题。

我正在构建一个实用程序框架来帮助对Qt4信号进行单元测试(测试是否发出了正确的信号)。我的想法是创建一个类CallChecker来存储插槽的验证器(包装std::function对象),并能够运行它们。然后,测试将创建一个由此派生的类;该类将定义运行相应验证器的插槽。这是使用的想法(简化):

我有一个工作实现(ideone 上的 gcc),其中CallChecker使用一std::vector对,指向成员的指针强制转换为通用函数类型。在对编译器标志/vmg

如果您可以提出比通过指向成员的指针查找更好的解决方案,我会很高兴听到它。我的目标是在实现测试槽的类中易于使用:我真的希望这些槽是简单的单行。使用插槽签名的文本表示(Qt 内部使用的)并不是一个真正的选择,因为它太容易出现拼写错误。

0 投票
1 回答
4432 浏览

c++ - Why doesn't reference-to-member exist in C++?

In C++ I can chose between function pointers and function references (or even function values for the sake of completeness):

When it comes to methods however, I don't seem to have this choice between pointers and references.

This leads me to the assumption that method references do not exist in C++. Is that true? If it is, what is the reason they do not exist?