C ++:使用“()。”和“()[]。”

时间:2012-01-09 14:54:31

标签: c++

我正在尝试使用C ++来理解西门子扫描仪的编程,并且鉴于我的C ++技能有限,我在理解供应商提供的代码的许多部分时遇到了问题。

问题1

例如,代码使用引用(rMrProt)来对象MrProt和符号(例如使用().()[].)对我来说非常混乱。 例如:

ImageSamples = rMrProt.kSpace().baseResolution()
ImageSize = rMrProt.sliceSeries()[0].readoutFOV()

对这些陈述的一些解释将不胜感激。

有关对象MrProt的所有信息都在“MrProt.h”,“MrProt.dll”,“MrProt.lib”中。所有这些文件都已在以下位置共享: https://docs.google.com/open?id=0B0Ah9soYnrlIYWZkNDU2M2EtYTNmNC00YTc5LTllMzItYzIyMWU4M2ZhY2Fi

问题2

另外,我一直试图读取MrProt.dll和MrProt.lib但没有成功。直到现在,我才知道了dumpbin。任何帮助将不胜感激。

问题3

我的另一个困惑是与MrProt.h本身的某些部分有关。 MrProt.h中有一个声明:

class __IMP_EXP MrProt: public MrProtocolData::MrProtDataDelegate
{
   typedef MrProtocolData::MrProtDataDelegate BasicImplementation;
   public:
   MrProt();
   MrProt(const MrProt& rSource);
   …
   ….
}

在这里,__IMP_EXP,我想这是一些编译器特定的东西..一些装饰等。但是,我仍然不知道该怎么做。

4 个答案:

答案 0 :(得分:5)

问题1。

rMrProt.sliceSeries()[0].readoutFOV()

装置

  • 选择rMrProt的{​​{1}}成员并致电。显然,它返回一个类似于数组的对象,可以编入索引。
  • 从结果中取第一个元素(sliceSeries)。这是某种对象。
  • 在该元素/对象上,调用[0]

问题2.你真的不应该读二进制文件。应该有他们的文件。

答案 1 :(得分:3)

1)

ImageSamples = rMrProt.kSpace().baseResolution()

这只是方法链接。您在kSpace()上调用返回对象的方法rMrPrto,然后在该对象上调用baseResolution()

2)这些是二进制文件。你期望看到什么?要阅读它们,你必须是asm的专家,或者至少知道一些低级概念。

3)__IMP_EXP是一种常见的指令类型,它告诉编译器该类是导出还是导入。

它扩展为_declspec(dllimport)_declspec(dllexport),具体取决于类的定义是在当前模块还是其他模块中。

答案 2 :(得分:1)

identifier()是方法/函数调用

identifier [i]返回数组中的第i个元素。

identifier()[i]返回由identifier()

返回的数组的第i个元素

答案 3 :(得分:1)

我只能帮助解决问题1:

如果rMrProt.kSpace()的返回值是结构。而不是将其保存到结构然后访问它的成员,您可以使用rMrProt.kSpace().MemberName

直接访问他的成员

rMrProt.sliceSeries()来说是相同的,我想它会返回一个数组。所以rMrProt.sliceSeries()[0]将访问返回数组中的第一个值。

相关问题