我使用 Qt 5.2。 在我的程序中,我想更改 QString::toDouble(bool *ok) 函数的标准实现。我写:
double QString::toDouble(bool *ok) const{
return QLocale().toDouble(this);
}
当我使用选项 -std=C++0x
编译它时,会出现下一个错误:
Multiple definition of `QString::toDouble(bool*) const'
我知道,我可以用像 Ruby 这样的语言来做。我觉得这种方式换成Double locale还是挺不错的。如果这是一种糟糕的编程风格或有助于实现这一点,请纠正我。
更新 但是编译器允许我改变静态函数的实现
QString QString::number(double n, char f, int prec){
return QLocale().toString(n, f, prec);
}
这也是一种糟糕的编程风格吗?
最佳答案
C++(和 C)不支持 Ruby 风格的“猴子补丁”,因为函数是在编译 时绑定(bind)在一起的,而不是在运行 时。 Qt 的其余部分已经链接到 double QString::toDouble(bool)
的旧版本。
(Objective-C 像 Smalltalk 和 Ruby 一样对函数调用使用动态调度,实际上确实通过“Method Swizzling”支持这一点。)
根据您的操作系统,您可以利用加载程序执行“函数 Hook ”。这是加载程序允许您重新实现共享库的一部分的地方。有很多注意事项,这不起作用的地方,以及巧妙地导致难以调试的崩溃的方法。为了完整起见,我只包含这些链接;你应该把你的代码变成一个新函数:
关于c++ - 在 C++ 中更改函数实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23629575/