Пожалуйста, не бейте меня или не говорите, что я ошибаюсь, задавая этот вопрос или что множественное наследование является злым. Этот вопрос заключается в том, чтобы лучше понять, как работают компиляторы 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();
}
};
компилятор будет генерировать что-то, что эквивалентно следующему:
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>
является способ решить эту проблему, если это правда, я хотел бы знать, как получить желаемые результаты. если я не хотел бы знать, как сделать это
Знаете ли вы, что компилятор уже выполняет то, что вы хотите? Вы пытались установить уровни оптимизации, а затем посмотрели листинг на ассемблере? –
Простите мое невежество, но как это сделать вы представляете код 'inlined' от работы по-разному с множественным наследованием? –
Я нейтрально отношусь к комплитеру и хорошо разбираюсь в языке ассемблера. Что касается кода 'inline', то компилятор возьмет код от использования кода от вызова базовой функции и вставляет код в производную функцию вместо перехода через v-таблицу для поиска функции –