基本クラスのメンバー関数が子クラスのメンバー関数に直接アクセスできる可能性はありますか?
Androindのコードを見つけました。BufferQueueはBnSurfaceTextureを継承し、1つのメンバー関数「requestBuffer」を持っています。
基本クラスBnSurfaceTextureでは、requestBufferを直接呼び出すだけであることがわかりました。
基本クラスBnSurfaceTextureは関数「requestBuffer」をどのように認識しますか?
ありがとう
基本クラスのメンバー関数:
status_t BnSurfaceTexture::onTransact(
uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
{
switch(code) {
case REQUEST_BUFFER: {
CHECK_INTERFACE(ISurfaceTexture, data, reply);
int bufferIdx = data.readInt32();
sp<GraphicBuffer> buffer;
/* it call requestBuffer directly */ <--------
int result = requestBuffer(bufferIdx, &buffer);
reply->writeInt32(buffer != 0);
子クラスの宣言と実装:
class BufferQueue : public BnSurfaceTexture {
private:
virtual status_t requestBuffer(int slot, sp<GraphicBuffer>* buf);
status_t BufferQueue::requestBuffer(int slot, sp<GraphicBuffer>* buf) {
ATRACE_CALL();
ST_LOGV("requestBuffer: slot=%d", slot);
Mutex::Autolock lock(mMutex);
...
return NO_ERROR;
}