kullanırken derleyici temel sınıf yöntemi görmez Neden aşağıdaki kod parçası var:cRTP
struct Iface
{
virtual int Read() = 0;
int Read(int x) {
return Read() + x;
}
};
template <typename Impl>
struct Crtp : public Iface
{
virtual int Read() {
return static_cast<Impl&>(*this).ReadImpl();
}
//using Iface::Read;
};
struct IfaceImpl : public Crtp<IfaceImpl>
{
int ReadImpl() {
return 42;
}
};
int main()
{
IfaceImpl impl;
impl.Read(24); // compilation error
Iface& iface = impl;
iface.Read(24); // always compiles successfully
}
İkisi msvc, gcc, clang bu kodu reddetmek, onlar bulamıyor yöntem Read(int x)
Ancak Crtp
içinde using Iface::Read
uncomment eğer kodum başarılı bir şekilde derler. Ben Iface bir başvuru atarsan Read(int x)
Bunun nedeni nedir diyoruz ki
Not?