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