簡體   English   中英

更改庫的方法名稱

[英]Change method name of a library

我正在使用一個庫,但是有些方法名稱很爛。 有沒有一種方法可以安全地更改這些方法名而又不影響lib的來源?

你可以有這樣的標題

inline int NiceName(){return HorribleName();}

雖然不適用於類方法,但是您可能不得不求助於-恐怖-宏

如果您確實要更改類的方法名稱,則可以。 只需對原始類進行子類化,然后添加一個具有漂亮名稱的新方法,即可將其參數完美地轉發給您想要更改的丑陋名稱的方法。

struct B
{
    // for example
    int UglyName(std::string str, int i)
    { std::cout << str << " " << i << std::endl; return i + 1; }
};

struct C : B
{
    template<typename ...Args>
    auto PrettyName(Args&& ...args)
    { return UglyName(std::forward<Args>(args)...); }
};

int main()
{
    C c;
    std::cout << "return value: " << c.PrettyName("Test Message: ", 23) << std::endl;
    return 0;
}

由於方法名稱是ABI級別的詳細信息,因此每台機器都不會有一個答案...不同的ABI使用不同的名稱處理方案和參數編碼方案等...如果將其范圍縮小到至少一個OS,則可能會有一個可用於重命名某些方法(binutils或其他方法)的工具..但是您還必須修改標頭以使用新名稱,否則編譯器將阻塞...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM