我可以在运行时重新定义 OpenCascade/OCCT header 中定义的 C++ static const 吗?
Can I redefine a c++ static const defined in a OpenCascade/OCCT header at runtime?
也许这很简单,但我想动态地重新定义库中的常量集 header,这样我就不必在每次更改时都重新编译它。在 OpenCascade 的 Precision.hxx 中,常量“Precision::Confusion”定义为:
class Precision
{
public:
...
static Standard_Real Confusion() { return 1.e-7; }
...
}
是否可以在运行时在 (c++) 函数中重新定义它?
如果您想使用这个常量来影响您的代码和 OCCT 本身中的所有内容,而无需重新编译使用它的每一段代码,您可以将常量的定义移动到 .cxx 文件。
// Precision.hxx
class Precision
{
public:
...
Standard_EXPORT static Standard_Real Confusion();
...
}
// Precision.cxx
Standard_Real Precision::Confusion() { return 1.e-7; }
// FILES
Precision.hxx
Precision.cxx
在这种情况下,您需要在修改常量后重新构建TKMath.dll
动态库。
将此类常量移动到导出函数中可能会对 OCCT 算法的性能产生负面影响,因为将需要额外的函数调用并且不可能进行编译器优化。
另一个问题是某些 OCCT 算法在更改 Precision::Confusion()
值后可能会由于与其中的其他数值常量组合而实际上变得损坏/不稳定/变慢。
如果您发现 Precision::Confusion()
对于您的计算来说太粗糙了 - 考虑使用您的模型使用其他长度单位而不是更改全局常量(例如从米切换到毫米或从毫米切换到微米)。 OCCT 中的数据交换组件支持 export/import 步的长度单位转换。
还要注意 Precision::Confusion()
在 3D space 中仅定义了一个 lower/default 精度值。使用拓扑时,形状级别的公差值将用于扩大算法公差,因此更改 Precision::Confusion()
根本不会影响此类算法,以防您的模型以某种方式损坏(编码太大的公差值无法覆盖几何误差定义)。
也许这很简单,但我想动态地重新定义库中的常量集 header,这样我就不必在每次更改时都重新编译它。在 OpenCascade 的 Precision.hxx 中,常量“Precision::Confusion”定义为:
class Precision
{
public:
...
static Standard_Real Confusion() { return 1.e-7; }
...
}
是否可以在运行时在 (c++) 函数中重新定义它?
如果您想使用这个常量来影响您的代码和 OCCT 本身中的所有内容,而无需重新编译使用它的每一段代码,您可以将常量的定义移动到 .cxx 文件。
// Precision.hxx
class Precision
{
public:
...
Standard_EXPORT static Standard_Real Confusion();
...
}
// Precision.cxx
Standard_Real Precision::Confusion() { return 1.e-7; }
// FILES
Precision.hxx
Precision.cxx
在这种情况下,您需要在修改常量后重新构建TKMath.dll
动态库。
将此类常量移动到导出函数中可能会对 OCCT 算法的性能产生负面影响,因为将需要额外的函数调用并且不可能进行编译器优化。
另一个问题是某些 OCCT 算法在更改 Precision::Confusion()
值后可能会由于与其中的其他数值常量组合而实际上变得损坏/不稳定/变慢。
如果您发现 Precision::Confusion()
对于您的计算来说太粗糙了 - 考虑使用您的模型使用其他长度单位而不是更改全局常量(例如从米切换到毫米或从毫米切换到微米)。 OCCT 中的数据交换组件支持 export/import 步的长度单位转换。
还要注意 Precision::Confusion()
在 3D space 中仅定义了一个 lower/default 精度值。使用拓扑时,形状级别的公差值将用于扩大算法公差,因此更改 Precision::Confusion()
根本不会影响此类算法,以防您的模型以某种方式损坏(编码太大的公差值无法覆盖几何误差定义)。