[英]How to convert Python to C++?
我正在尝试运行用C ++编写的代码,该代码应与我在Python中编写的代码相同。 他们俩都使用Fenics。
我的问题是我无法将Python类转换为C ++类。
例如,我的Python代码是:
V = VectorFunctionSpace(mesh, "Lagrange", 1)
u = Function(V)
En = 5*dx - dot(3, u)*ds(2)
def f(self, x):
u.vector()[:] = x
return assemble(En)
这里的问题是编译器找不到En,因为在类内部未定义En。
我的C ++代码:
double f(const GenericVector& x)
{
u.vector() = x;
return assemble(F);
}
int main()
{
//...things that apparently work...
Function u(Vh);
MyClass::BilinearForm F;
}
我该如何解决?
C ++具有全局变量,就像Python具有全局变量一样。
如果要访问在类外部定义的内容,可以在其MyClass::Thingy
加上类名称并使其静态( MyClass::Thingy
),使其成为全局MyClass::Thingy
,为它提供访问器函数( MyInstance.GetThingy()
),或将其传递给它。直接作为使用它的函数的参数。
作为许多方法之一,您可以尝试将F定义为全局变量,如下所示:
...
MyClass::BilinearForm F; // The global scope
double f(const GenericVector& x)
{
u.vector() = x;
return assemble(F);
}
int main()
{
//...things that apparently work...
Function u(Vh);
// you can use F here or call the function f
...
}
F是全局变量,您可以在此范围内的任何方法中使用它。 我不知道您的类是如何定义的,或者您是否使用自定义名称空间,但是如果BilinearForm
是此处的可访问类,您可能会基于实现摆脱作用域解析(MyClass::)
部分。 您也可以将F
定义为static
变量,因此,如果您可以提供更多详细信息,我相信您可能会获得更精确的反馈。
希望有帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.