我目前卡住试图包装使用这样定义的本地C++接口本地C++ API的一部分:结束语本地C++代码++/CLI
#pragma once
class BufferReaderInterface
{
public:
virtual ~BufferReaderInterface()
{
}
const static int BUFFER_SIZE = 100;
virtual void ReadNextBuffer(char* buffer) = 0;
};
它是然后使用一个解析器类读取数据到它的本地缓存中供以后分析是这样的:
#pragma once
#include "BufferReaderInterface.h"
class BufferParser
{
public:
void ReadNextBuffer(BufferReaderInterface& reader)
{
reader.ReadNextBuffer(localBuffer);
}
void ParseBuffer()
{
// do buffer parsing after ReadNextBuffer()...
}
private:
char localBuffer[BufferReaderInterface::BUFFER_SIZE];
};
下面是从文件流中读取缓冲区(它没有成为一个文件流是一个简单的实现也可以实现从网络上读取):
#pragma once
#include <fstream>
#include "BufferReaderInterface.h"
class FileStreamBufferReader : public BufferReaderInterface
{
public:
FileStreamBufferReader(std::string filename)
{
bufferFile.open(filename.c_str(),
std::ios_base::in | std::ios_base::binary);
if(!bufferFile)
{
throw std::invalid_argument(filename);
}
}
~FileStreamBufferReader()
{
bufferFile.close();
}
void ReadNextBuffer(char* buffer)
{
bufferFile.read((char *)buffer, BUFFER_SIZE);
}
private:
std::ifstream bufferFile;
};
一个简单的用法是如下:
BufferReaderInterface* br = new FileStreamBufferReader("test.binary");
BufferParser parser;
parser.ReadNextBuffer(*br);
parser.ParseBuffer();
// use parsed data...
delete br;
我应该如何换行BufferParser
类?我正在尝试使用Pimpl-idiom,但是在正确实施管理版本ReadNextBuffer(BufferReaderInterface&)
函数时,我遇到困难。我试图创建一个public interface class ManagedBufferReaderInterface
,但后来我卡住了,因为BufferParser
需要一个本地C++接口,而C++/CLI类不能实现一个本地C++接口,如BufferReaderInterface
。有没有人遇到过这个?
任何意见将不胜感激!
我定义接口IDL文件,并使用COM的本地/管理过渡。 – 2012-02-02 10:22:40