Исключить неиспользуемые виртуальные функцииC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Исключить неиспользуемые виртуальные функции

Сообщение Anonymous »

Чтобы исключить неиспользуемую (обычную) функцию, я могу использовать:
-ffunction-sections, -fdata-section и --gc-sections.
и это работает.

Я знаю, что при использовании полиморфизма функции имеют «позднее связывание», поэтому я полагаю, что нет способа решить, какую функцию можно удалить во время процесса связывания.

Но я использую чисто виртуальную функцию, чтобы заставить класс, который наследуется для реализации некоторой функции. Затем в коде я использую объекты (а не указатель/ссылку на объект, поэтому я не использую полиморфизм).

псевдокод:

Код: Выделить всё

class BASE {
...
virtual void do_sth() = 0;
virtual void do_sth_else() = 0;
...
};

class C1 : BASE {
...
void do_sth() { //some code }
void do_sth_else() { //some code }
}

main()
{
//the do_sth_else function is never used in main
C1 obj1;
obj.do_sth();
}
Есть ли какой-нибудь способ устранить эти неиспользуемые функции (do_sth_else) во время процесса связывания?
Может быть, я что-то неправильно понял. и поэтому я думаю, что должен быть способ удалить эту неиспользуемую функцию. Если да, то объясните мне, почему, когда я НЕ использую указатели с виртуальными функциями, невозможно «избавиться» от полиморфных накладных расходов. :)

К вашему сведению: этот код предназначен главным образом для учебных целей.

Подробнее здесь: https://stackoverflow.com/questions/174 ... -functions
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»