이 질문을하거나 여러 상속이 잘못되었다고 나에게 잘못 말하지 마십시오. 이 질문은 C++ 컴파일러가 작동하는 방식을 더 잘 이해하는 것입니다. inline
문은 컴파일러에게 함수 호출을 소스 코드로 대체하기 위해 컴파일러에게 모든 옵션을 포함하거나 포함하지 말 것을 알리는 데 사용됩니다. 만약 당신이 좋은 수 inline
기능을 강제 수 있지만 정말 해결하기 위해 노력하고 문제가되지 않습니다. 내가하고 싶은 일은 하나의 장소에서 작성되고 컴파일러가 다른 장소에서 복사하여 붙여 넣는 코드 한 장을 생성 할 수있게하는 것입니다. 이 코드는 내가 쓰기는 다음과 같이 보일 것입니다 :다중 상속을 사용하여 가상으로 인라인하는 방법
struct base
{
virtual double eval() = 0; // should be no eval function for the
};
struct foo : public base
{
virtual double eval() overrides
{
return //foo eval
}
};
struct bar : public base
{
virtual double eval() overrides
{
return //foo eval
}
};
struct baz : public base
{
virtual double eval() overrides
{
return //baz eval
}
};
struct FooBarBaz : public foo, public bar, public baz
{
virtual double eval() final
{
return foo::eval() + bar::eval() + baz::eval();
}
};
컴파일러는이에 상응하는 무언가 생성 할 것이다 : 나는 <type_traits>
을 사용하여이 문제되는 경우를 해결하는 방법이라고 들었다
struct base
{
virtual double eval() = 0; // should be no eval function for the
};
struct foo : public base
{
virtual double eval() overrides
{
return //foo eval
}
};
struct bar : public base
{
virtual double eval() overrides
{
return //foo eval
}
};
struct baz : public base
{
virtual double eval() overrides
{
return //baz eval
}
};
struct FooBarBaz : public foo, public bar, public baz
{
virtual double eval() final
{
return /*foo eval*/ + /*bar eval*/ + /*baz eval*/
}
};
을 원하는 결과를 얻는 방법을 알고 싶습니다. 그렇지 않은 경우이 작업을 수행하는 방법을 알고 싶습니다.
컴파일러가 이미 원하는 것을 수행하고 있는지 아십니까? 최적화 수준을 설정 한 다음 어셈블리 언어 목록을 살펴 보았습니까? –
용서해주십시오.하지만 어떻게합니까? '상속 된'코드가 다중 상속과 다르게 작동하는 것을 상상하십니까? –
나는 컴파일러에 중립적이며 어셈블러 언어에 대해 잘 알고있다. 'inline' 코드의 경우 컴파일러는 기본 함수 호출에서 코드를 사용하여 코드를 가져 와서 v-table을 통해 함수를 검색하는 대신 코드를 붙여 넣습니다. –