[英]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.