C++ 更改库的方法名称

C++ 更改库的方法名称,c++,c++11,c++14,class-method,C++,C++11,C++14,Class Method,我使用的是一个库,但有些方法名称很糟糕。有没有一种方法可以安全地更改这些方法名而不必触及库的源?因为方法名是ABI级别的详细信息,所以不会对每台机器都有一个答案。。。不同的ABI使用不同的名称篡改方案和参数编码方案等。。。如果您将其缩小到至少一个操作系统,那么可能有一个工具可以用来重命名某些方法(binutils或其他)。。但是您还必须修改头以使用新名称,否则编译器将阻塞…您可以使用这样的头 inline int NiceName(){return HorribleName();} 但是对于类

我使用的是一个库,但有些方法名称很糟糕。有没有一种方法可以安全地更改这些方法名而不必触及库的源?

因为方法名是ABI级别的详细信息,所以不会对每台机器都有一个答案。。。不同的ABI使用不同的名称篡改方案和参数编码方案等。。。如果您将其缩小到至少一个操作系统,那么可能有一个工具可以用来重命名某些方法(binutils或其他)。。但是您还必须修改头以使用新名称,否则编译器将阻塞…

您可以使用这样的头

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;
}
结构B { //比如说 int UglyName(std::string str,int i)
{std::cout No,你不能这么做。阅读有关模式的文章。有些人(比如proxy)是根据你的要求被邀请的。基本上,这不值得你付出努力