簡體   English   中英

八度C ++ API(feval)-如何將多個參數傳遞給feval?

[英]Octave C++ API (feval)- how to pass multiple parameters to feval?

環境 :Windows 7專業版+八度3.6.2 + Visual C ++

我試圖根據教程將八度嵌入到獨立的C ++程序中:

http://www.gnu.org/software/octave/doc/interpreter/Standalone-Programs.html#Standalone-Programs

我設法運行第一個程序沒有問題,但是第二個程序給出了錯誤消息。

第二個程序的簡化版本

int main (void)
{
    string_vector argv (2);
    argv(0) = "embedded";
    argv(1) = "-q";
    octave_main (2, argv.c_str_vec(), 1);

    Matrix a_matrix = Matrix (1, 2);
    std::cout << "GCD of [12, 16] is ";


    a_matrix(0)=12;
    a_matrix(1)=16;

    octave_value_list in = octave_value (a_matrix);
    octave_value_list out = feval ("gcd", in, 1);

    std::cout<<out(0).matrix_value()<<std::endl;
    return 0;

}

“ feval”行無法執行。 原因是在octave 3.6.2中 ,函數gcd不再接受value列表作為參數 ,而必須調用gcd(value1,value2,...)而不是gcd([value1,value2,...]) ,它在octave 3.2.4中得到了支持,因此這在這里提出了我的主要問題:

如何將多個參數作為單獨的值傳遞給feval,以便可以通過octave的C ++ API調用gcd(value1,value2,...)之類的函數?

最終,我需要在GUI應用程序中進行一些圖形處理,因此我可能需要在C ++端調用諸如conv2之類的函數(可悲的是,它還需要多個函數參數)

預先感謝您的任何幫助

好吧,我剛剛做了替換:

//octave_value_list in = octave_value (a_matrix);
octave_value_list in;
for (octave_idx_type i = 0; i < n; i++)
   in(i) = a_matrix (i);

它可以工作...但是我收到一個jre錯誤。

事實證明,直接傳遞octave_value_list作為輸入,而不是將Matrix轉換為octave_valueoctave_value_list ,效果很好。 (也許octave_value是元凶?)

因此, 倍頻程3.6.2下的工作代碼如下:

int main (void)
{
    string_vector argv (2);
    argv(0) = "embedded";
    argv(1) = "-q";
    octave_main (2, argv.c_str_vec(), 1);

    std::cout << "GCD of [12, 16] is ";

    // Use octave_value_list directly as input
    octave_value_list in(2);    
    in(0)=12;
    in(1)=16;

    octave_value_list out = feval ("gcd", in, 1);

    std::cout<<out(0).int_value()<<std::endl;
    return 0;

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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