问题标签 [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 投票
4 回答
1605 浏览

c++ - 打印指向成员字段的指针

我正在调试一些涉及指向成员字段的指针的代码,我决定将它们打印出来以查看它们的值。我有一个函数返回一个指向成员的指针:

我尝试使用cout

我得到了1 and 0。我认为数字表示字段在struct(即1isy0is x)内的位置,但不,打印的值实际上是1针对非空指针和0空指针。我想这是一种符合标准的行为(即使它没有帮助)——我说的对吗?此外,兼容的 c++ 实现是否可以始终0为指向成员的指针打印?甚至是一个空字符串?

最后,如何以有意义的方式打印指向成员的指针?我想出了两个丑陋的方法:

还有更好的方法吗?

0 投票
1 回答
698 浏览

c++-cli - 指向 C++/CLI 中的数据成员的指针

例如,如何在 C++/CLI 中创建指向数据成员的指针

0 投票
2 回答
331 浏览

c++ - 指向成员函数默认值的 CRTP 相关编译器错误

你好呀,

在制作基于 CRTP 的通用包装器来调用任意库函数时,我遇到了一个我无法理解的问题。这是一个非常简化的代码来说明问题:

一切都按预期编译和工作。但是,如果我尝试使用指针TDerived::Foo()作为第二个参数的默认参数TBase::Call(...)

编译器给出了一个语法错误......我感觉它与编译器如何解析代码有关,并且它无法找出指向尚未定义(或实例化)类的函数的指针。TDerived但是,调用构造函数作为第三个参数的默认参数是没有问题的TBase::Call(...)。有人可以就发生的事情给我一个明确的答案吗?为什么派生类 MFP 不被接受,而派生类的对象被接受为默认参数?

谢谢。

编辑:编译器的错误(MSVS2010 命令行编译器):

这是一个语法错误 - 它不能识别TDerived_为 MFP 的默认参数中的类型。这之后还有其他错误,它们都是语法错误,因为函数定义现在格式错误。我就是这么理解的。

编辑:基本上,我不明白为什么我可以使用对象TDerived_作为默认参数,但不能使用指向成员函数的指针作为默认参数。

编辑:好的,这让我发疯了。首先,我改变了typedef TBase< PValue, TDerived > TBase_;它所指出的(谢谢你们,伙计们!)。事实上,它只在 MSVC++ 下编译,因为这个编译器不做两部分解析;即,在codepad.org(使用g++ 4.1.2)上它没有编译。其次,在那之后,我尝试static void Call( PType /*pSomething*/, void(TDerived_::*pFunction)( void ) = &TDerived_::Foo, TDerived_ pDerived = TDerived_() )在codepad.org上使用......它编译并正确运行!所以我现在真的很困惑:人们向我解释了为什么它不正确(而且我无法理解“为什么”(参见我以前的编辑)),现在事实证明 g++ 可以正确编译它......这是否意味着它只是MSVC++ 问题而不是代码?或者从标准的角度来看代码确实存在问题(我看不到它)并且g ++“错误地”接受它(我认为不太可能)?..帮助?!

0 投票
4 回答
5229 浏览

c++ - 指向非法引用的成员的指针?

假设我有:

编译器抱怨我不能获取成员的地址,因为它是一个引用。准确地说:

语义问题:无法形成指向成员的指针,指向引用类型为“int &”的成员“j”

我知道这样做似乎毫无意义,但我只是想知道为什么不能这样做。

为什么这是不可能的?

0 投票
1 回答
1012 浏览

c++ - 指向成员、类型描述符和引用的指针

我正在研究 C++11 中的类型描述符项目。类型描述符的工作是了解类中每个成员的类型、它的大小以及它与对象基础的偏移量。我不支持多重继承以及具有虚拟方法的对象,所以我现在让它变得更简单。目标是能够使用描述符序列化和反序列化对象。

请注意,这是一个宠物项目,用于处理可变参数模板、指向成员的指针和我不熟悉的 C++ 的其他功能等功能,因此无需将我指向 boost::archiving 之类的东西。:)

我实际注册成员的方式与 boost::python::class_ 的方式非常相似。

不幸的是,C++ 的指针指向成员特性不能与 C++ 中的引用一起使用,正如我本周早些时候了解到的那样:https ://stackoverflow.com/a/8336479/1074536 ,所以我不能以 &Foo::refToAndInt 为例。

至于我如何计算成员的偏移量,我没有使用宏的偏移量,因为我的类并不总是 POD。

因此,由于我不能使用指向成员的指针来计算引用的偏移量,所以我想我会尝试:

但是否已在另一个堆栈溢出线程中指出,这是未定义的行为,显然在 LLVM 上它会崩溃。:(

我想避免做一些事情,比如获取前一个成员的偏移量,添加它的大小,然后以某种方式计算对齐我的下一个成员所需的填充,因为它看起来很混乱并且容易出错

所以,我不能同时使用这两种技巧,并且 offsetof 仅适用于 POD。除了我的其他可怕建议之外,关于我下一步可以尝试什么的任何建议?

谢谢!

0 投票
1 回答
617 浏览

c++ - C++ 是否支持成员函数引用?

C++ 允许函数指针函数引用。它还允许指向成员函数的指针

它是否允许引用成员函数

我似乎无法从标准中推断出规则,并且我未能使程序与它们一起工作。


[成员函数指针] [成员函数引用]

0 投票
3 回答
1210 浏览

c++ - 了解指针成员运算符

我从一本 c++ 练习书中复制了这个程序。幕后发生了什么?

预期的输出是:

总和=30 总和=70

0 投票
2 回答
143 浏览

c++ - 关于指向非静态类成员的指针的说明

当我需要指向类成员的指针时,我执行以下操作

我的问题是为什么我需要使用 & 运算符来获取如果它是静态函数可能会被忽略的地址。另外,我听说指向成员的指针并不是真正的指针,有人可以澄清一下吗?

0 投票
1 回答
466 浏览

c++ - 从共享对象调用外部类成员

经过大量阅读herehere后,我仍然无法让我的代码正常工作。这是问题所在:

我有两个班级,先进先出:

和另一个类 Process_Wrapper:

成员函数Process_Wrapper::GetOutputPortIDtoFifoMap返回一个指向类的初始化对象的指针Fifo

现在,我有一个共享对象 (.so),它使用类头文件编译FifoProcess_Wrapper包含在内。也就是说,.so 文件知道这些类的接口。

Process_Wrapper我从( )的成员函数调用这个 .so 文件Process_Wrapper::function2并将指针传递给 .so - this。所以,我假设共享对象会知道关于类的一切Process_Wrapper

在 .so 文件中,我试图调用成员函数Process_Wrapper::GetOutputPortIDtoFifoMap,这显然不起作用。所以,我尝试了:

where正确p1->wptr返回指向Process_Wrapper对象的指针。

我在这里迷路了。我对这个概念很陌生,这些例子并没有直接回答这个问题。我该怎么做呢?

另外,由于我使用的是 C++0x/C++11,任何人都可以告诉我(最好)使用 std::bind 或 mem__fun_ref 的解决方案吗?

编辑:好的,我想我可以完善我的问题:我有一个 classMyclass和一个 object myobject,它是这个类的一个实例。Myclass有一个成员函数,接受一些参数,并返回一个类型的指针PTRTYPE。如何提取Myclass要传递给另一个函数的成员函数,以便它可以用作普通的指向函数的指针。或者,具体来说:如何从指向成员函数的绑定指针中提取函数指针?

0 投票
2 回答
1128 浏览

c++ - C++ 成员函数指针

我正在用 C++ 做一个小游戏,我正在发现类成员函数指针。我不知道让它们以正确的方式工作,但这是我的尝试。

你能给我一个关于实施它们的正确方法的好建议吗?

最好的祝福。