2016-03-22 17 views
0

Ich benutze eine Bibliothek, aber einige Methoden Namen nur saugen. Gibt es eine Möglichkeit, diese Methodennamen sicher zu ändern, ohne die Quelle der Lib zu berühren?Änderungsmethode Name einer Bibliothek

+0

, Sie können das nicht – DimChtz

+1

über Muster lesen. Einige wie Proxy wurde gegen Ihre Anforderung –

Antwort

-2

Da der Methodenname ABI-Level-Detail ist, wird es keine einzige Antwort für jede Maschine geben ... verschiedene ABIs verwenden unterschiedliche Namen Mangling-Schemata und Param-Codierungsschemata etc ... wenn Sie es auf mindestens ein OS eingrenzen, es könnte ein Werkzeug geben, mit dem man einige Methoden umbenennen kann (binutils oder so) ... aber man muss auch die Header ändern, um den neuen Namen zu verwenden oder der Compiler wird ersticken ...

+0

eingeladen im Grunde wäre es nie Ihre Mühe wert –

1

kann man haben header wie diese

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

Doesnt Arbeit für Klassenmethoden aber es könnten Sie zurückgreifen - oh die Grauen - Makros

1

Wenn Sie wirklich den Methodennamen einer Klasse ändern möchten, können Sie das tun. Unterteilen Sie einfach die ursprüngliche Klasse und fügen Sie eine neue Methode mit einem schönen Namen hinzu, die ihre Parameter perfekt an die Methode mit einem hässlichen Namen weiterleitet, den Sie ändern möchten. Kein

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