반응형
정적 가상 기능을 가질 수 있습니까? 그렇지 않다면 왜?
가능한 중복:
C++ 정적 가상 멤버?
정적 가상 기능을 가질 수 있습니까? 그렇지 않다면 왜?
class X
{
public:
virtual static void fun(){} // Why we cant have static virtual function in C++?
};
아니요, C++에서는 의미가 없기 때문입니다.
가상 함수는 클래스 인스턴스 에 대한 포인터/참조가 있을 때 호출됩니다 . 정적 함수는 특정 인스턴스에 연결되지 않고 클래스에 연결됩니다. C++에는 클래스에 대한 포인터가 없으므로 정적 함수를 가상으로 호출할 수 있는 시나리오가 없습니다.
의미가 없습니다. 가상 멤버 함수 의 요점 은 호출된 개체 인스턴스 의 동적 유형에 따라 전달된다는 것 입니다. 반면에 정적 함수는 인스턴스와 관련이 없으며 오히려 클래스 의 속성입니다 . 따라서 그것들이 가상이라는 것은 의미가 없습니다. 필요한 경우 비정적 디스패처를 사용할 수 있습니다.
struct Base
{
static void foo(Base & b) { /*...*/ }
virtual ~Base() { }
virtual void call_static() { foo(*this); /* or whatever */ }
};
struct Derived : Base
{
static void bar(int a, bool b) { /* ... */ }
virtual void call_static() { bar(12, false); }
};
용법:
Base & b = get_instance();
b.call_static(); // dispatched dynamically
// Normal use of statics:
Base::foo(b);
Derived::bar(-8, true);
ReferenceURL : https://stackoverflow.com/questions/9863007/can-we-have-a-static-virtual-functions-if-not-then-why
반응형
'IT이야기' 카테고리의 다른 글
JavaScript 객체를 JSON 문자열로 직렬화 (0) | 2021.09.18 |
---|---|
면도기 보기 내부에서 내 모델이 유효한지 어떻게 확인할 수 있습니까? (0) | 2021.09.18 |
파이썬에서 "컨테이너"란 정확히 무엇입니까? (0) | 2021.09.17 |
distutils에게 gcc를 사용하도록 지시하는 방법은 무엇입니까? (0) | 2021.09.17 |
최대 절전 모드: 일대일 지연 로딩, 선택 사항 = false (0) | 2021.09.17 |