wyeliminuj nieużywane funkcje wirtualne

Aby wyeliminować nieużywaną (zwykłą) funkcję, mogę użyć: -function-sections, -fdata-section i --gc-sections. i to działa.

Wiem, że użycie polimorfizmu, funkcji jest „późno wiążące”, więc przypuszczam, że nie ma sposobu, aby zdecydować, która funkcja może zostać usunięta podczas procesu łączenia.

Ale używam czystej funkcji wirtualnej do wymuszenia klasy, która dziedziczy, aby zaimplementować jakąś funkcję. Następnie w kodzie używam obiektów (nie wskaźnika / odniesienia do obiektu, więc nie używam polimorfizmu).

pseudo kod:

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();
}

Czy jest jakiś sposób, aby wyeliminować te nieużywane funkcje (do_sth_else) podczas procesu łączenia? Może coś źle zrozumiałem. i dlatego uważam, że powinien istnieć sposób na usunięcie tej nieużywanej funkcji. Jeśli tak, proszę wyjaśnić mi, dlaczego, gdy NIE używam wskaźników z funkcją wirtualną, nie ma możliwości „pozbycia się” polimorficznego narzutu. :)

FYI: Ten kod służy głównie do celów edukacyjnych.

questionAnswers(2)

yourAnswerToTheQuestion