Я использую библиотеку, но некоторые имена методов просто отстой. Есть ли способ безопасно изменить эти имена методов, не касаясь источника библиотеки?
вы можете иметь такой заголовок
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 используют разные схемы искажения имен и схемы кодирования параметров и т. д. … если вы сузите его, по крайней мере, до ОС, может быть инструмент, который вы можете использовать для переименования некоторых методов (binutils или что-то) .. но вам также придется изменить заголовки, чтобы использовать новое имя, иначе компилятор захлебнется …