簡體   English   中英

如何將Python轉換為C ++?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM