从 C++ 转换到德尔福(简单)
我在 C++ 中有一个函数,我试图在 delphi 中复制:
typedef double ANNcoord; // coordinate data type
typedef ANNcoord* ANNpoint; // a point
typedef ANNpoint* ANNpointArray; // an array of points
bool readPt(istream &in, ANNpoint p) // read point (false on EOF)
{
for (int i = 0; i < dim; i++) {
if(!(in >> p[i])) return false;
}
return true;
}
在 Delphi 中,我相信我已经正确声明了数据类型..(我可能是错的):
type
IPtr = ^IStream; // pointer to Istream
ANNcoord = Double;
ANNpoint = ^ANNcoord;
function readPt(inpt: IPtr; p: ANNpoint): boolean;
var
i: integer;
begin
for i := 0 to dim do
begin
end;
end;
但我无法弄清楚如何模仿 C++ 函数中的行为(可能是因为我不理解位移运算符)。
另外,我最终需要弄清楚如何将一组点从 Zeos TZQuery
对象传输到相同的数据类型 - 因此,如果有人对此有任何意见,我将非常感激。
I have a function in C++ that I am attempting to replicate in delphi:
typedef double ANNcoord; // coordinate data type
typedef ANNcoord* ANNpoint; // a point
typedef ANNpoint* ANNpointArray; // an array of points
bool readPt(istream &in, ANNpoint p) // read point (false on EOF)
{
for (int i = 0; i < dim; i++) {
if(!(in >> p[i])) return false;
}
return true;
}
In Delphi I believe that I have correctly declared the data types.. (I could be wrong):
type
IPtr = ^IStream; // pointer to Istream
ANNcoord = Double;
ANNpoint = ^ANNcoord;
function readPt(inpt: IPtr; p: ANNpoint): boolean;
var
i: integer;
begin
for i := 0 to dim do
begin
end;
end;
But I cannot figure out how to mimic the behavior in the C++ function (probably because I do not understand the bitshift operator).
Also, I need to eventually figure out how to transfer the set of points from a Zeos TZQuery
object to the same datatype - so if anyone has some any input on that I would really appreciate it.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
尝试:
无需单独读取每个 ANNcoord。请注意,在 C++ 中,istream 是一个流类,而不是 IStream 接口。 Delphi 的等价物是TStream。该代码假设流已打开以供读取(使用正确的参数 Create-d),并且当前流指针指向多个(暗淡)ANNcoords,就像 C++ 代码一样。
FWIW
在>> p[i]
从输入流in
读取ANNcoord
到p[i]
,解释p 作为指向
ANNcoords
数组的指针。更新
正如 Rob Kennedy 指出的,
in >> myDouble
从输入流中读取双精度值,但该流被解释为文本流,而不是二进制,即它看起来像:有,据我所知,没有Delphi 中流的等效方法或操作。只有
System.Read
和System.Readln
用于此目的。显然Peter Below曾经写过一个单元StreamIO
,它使得使用System.Read
和System.Readln
成为可能溪流。我只能找到一个版本,在新闻组帖子中。为可以从文本表示中读取双精度数、整数、单数等的流编写一个包装器可能是有意义的。我还没见过。
Try:
There is no need to read each ANNcoord separately. Note that istream is a stream class, not an IStream interface, in C++. Delphi's equivalent is TStream. The code assumes the stream is opened for reading (Create-d with the proper parameters) and the current stream pointer points to a number (dim) of ANNcoords, just like the C++ code does.
FWIW
in >> p[i]
reads anANNcoord
from the input streamin
top[i]
, interpretingp
as a pointer to an array ofANNcoords
.Update
As Rob Kennedy pointed out,
in >> myDouble
reads a double from the input stream, but the stream is interpreted as text stream, not binary, i.e. it looks like:There is, AFAIK, no equivalent method or operation in Delphi for streams. There is only
System.Read
andSystem.Readln
for this purpose. Apparently Peter Below once wrote aunit StreamIO
which makes it possible to useSystem.Read
andSystem.Readln
for streams. I could only find one version, in a newsgroup post.It would probably make sense to write a wrapper for streams that can read doubles, integers, singles, etc. from their text representations. I haven't seen one yet.