나는 이것이 기이하게 반복되는 템플릿 패턴의 예라고 생각한다. 이건 컴파일해야하는 것처럼 보이지만 그렇지 않습니다. 이것은 Xcode 8.3의 Clang과 같습니다. Blarg 가 Fungeable 있기 때문에이 작업을해야처럼왜이 호기심으로 반복되는 템플릿 패턴 예제가 컴파일되지 않습니까?
template<class T>
class Fungeable
{
public:
virtual ~Fungeable() {}
virtual bool funge(const Fungeable<T>& inFungeable) const = 0;
};
class Blarg : public Fungeable<Blarg>
{
public:
virtual bool funge(const Blarg& inFungeable) const override { return true; }
};
int main(int argc, const char * argv[]) {
Blarg b;
Blarg x;
return static_cast<int>(b.funge(x));
}
는 것 같습니다. 나는이 같은 Fungeable<Blarg>
를 취할 Blarg::funge()
의 서명을 변경하는 경우 그러나 나는 오류를 'funge' marked 'override' but does not override any member functions
를 얻을 :
class Blarg : public Fungeable<Blarg>
{
public:
virtual bool funge(const Fungeable<Blarg>& inFungeable) const override { return true; }
};
그런 다음 그것을 컴파일합니다.
Blarg
은 정의로는 Fungeable<Blarg>
이므로 첫 번째 버전이 작동하지 않아야합니까?
"Blarg는 정의에 따라 Fungeable"이므로 모든 'Blarg'은 'Fungeable '이지만 'Fungeable '의 모든 것이 'Blarg'는 아닙니다. –
tkausl