背景:我提供了一种基于两种不同技术的虚拟文件结构:FUSE和 MTP。由于两个框架都需要不同的接口,我创建了两个为这些接口提供服务的基类。FUSE 框架只知道IFuseFile
接口,而 MTP 框架只知道IMTPFile
接口。这些基类具有纯虚方法,由派生类实现。
问题:当直接实现它时,我得到一个"request for member IsWriteable is ambiguous"
编译器(参见示例源)。
解决方案:在寻找解决方案时,我只找到了菱形图案。但是我只有普通的纯虚方法,没有普通的类。对我来说,一个简单using BASE::method
的伎俩。
问题:由于我using BASE::method
之前使用了 only for hidden 方法,我无法解释为什么这段代码可以解决我的问题。你能解释一下吗?这只是 GCC 错误/功能吗?
这个例子:
class IFuseFile
{
virtual bool IsWriteable() const = 0;
public:
int HandleReadRequest( struct fuse_data* pData )
{
if( !IsWriteable() ) return -EACCESS;
...
}
}
class IMTPFile
{
virtual bool IsWriteable() const = 0;
public:
int ReadData( const char* pBuffer, int iSize )
{
if( !IsWriteable() ) return -1;
...
}
}
class PcComFile : public IFuseFile, public IMTPFile
{
using IFuseFile::IsWriteable;
using IMTPFile::IsWriteable;
}
class LogFile : public PcComFile
{
bool IsWriteable() const override { return true; }
}
class StatusFile : public PcComFile
{
bool IsWriteable() const override { return true; }
}