2012-12-27 30 views
2

我想爲C庫(ZeroMQ v3,更具體)編寫一個小的包裝庫。Common Lisp CFFI的嵌套結構和聯合

但是,我想知道如何在CFFI中聲明外部嵌套結構和聯合。

可以找到包含各自結構/聯合組合的C頭文件here

CFFI的文檔無法幫助到目前爲止,我也無法在網上找到類似的問題。

我會很高興的任何幫助!

+0

在這樣做之前,請查看[lisp-zmq](https://github.com/galdor/lisp-zmq)和[cl-zmq](http://www.cliki.net/cl -zmq) –

+1

我已經做到了。正如我的問題所說,我只明確針對ZeroMQ * v3 *,這既不受lisp-zmq也不支持cl-zmq。我個人認爲新項目應該從最新的穩定版庫開始。這就是爲什麼我要將lisp-zmq移植到ZeroMQ v3的原因。 –

回答

2

defcstruct可以在這種情況下使用。此外,在docs中,您會找到定義外部結構的示例,並且兩種類型的插槽可能都很簡單(類型如:int)和聚合(其他結構的名稱),所以沒有什麼能夠阻止您定義形成這個大聯盟然後組成聯盟的不同結構(還有一個defcunion結構)。

的自己CFFI實現具有對於這樣結構的實施例和測試:

(defcstruct s-short 
    (a-char :char) 
    (another-char :char) 
    (a-short :short)) 

(defcstruct s-s-short 
    (yet-another-char :char) 
    (a-s-short s-short)) 

注意a-s-shorts-short是類型的,如上所定義。

+0

謝謝!我有一個類似的想法,但我不確定這種方法是否最優雅。我想知道是否可以找到接近C代碼的解決方案,即使靈活性較差(例如嵌套defc *宏)。 –