嗯,我真的不知道什麼標題會是最好的。所以,我試圖實現一個'布爾電路設計器'(不是作業,用於學習目的)。我從一個簡單的例子開始:給定一個輸入端口,輸出端口,2根電線,一個電源和繼電器。該電路將如下所示:把很多班級連在一起
- 輸入端口連接到所述第一電線
- 輸出端口IIS連接到所述第二導線的另一端連接到電源的第二導線
- 的2線連接,中間與中繼
看起來像:
->in------------------------>
|
power-----------relay----------out->
它只是否定輸入位。我正在用C++實現它,所以想要創建一個好的類層次結構。如您所見,輸入可以連接到導線,輸出到導線,導線到繼電器以及更多變體。爲此,我有一個空類port
,這是所有電線,繼電器等的基類。示例代碼可能如下所示:
struct port {
//nothing
};
struct power : public port {
bool poweron = true;
};
struct relay : public port {
port* input;
bool on; //will depend on input wire's signal
};
struct wire : public port {
port* input; //input end
port* output; //output end
std::vector<port*> outports; //output sockets for additional branching
std::vector<port*> inports; //input sockets for additional branching
};
struct bit_input : public port {
port* output; //bit input can be vector too
};
struct bit_output : public port {
port* input; //only one input bit to the bit output (lol)
};
int main(void)
{
bit_input bin;
bit_output bout;
wire w0, w1;
power p;
relay r;
////////////////////////////////////////////////////////////////////////////////////////////////
bin.output = &w0; //input wire connected to boolean input's output: ->bin------->
bout.input = &w1; //output wire connected to boolean output's input: ------->bout->
w1.input = &p; //output wire's input end is set to the power supply power------->bout->
w1.output = &bout; //output wire's output end is set to the boolean output
w0.input = &bin; //input wire's input end is set to the boolean input's output
////////////////////////////////////////////////////////////////////////////////////////////////
w0.outports.push_back(&r); //one of input wire's output port is set to the relay; ->bin---|--->
// relay
// power--|---->bout->
w1.inports.push_back(&r); //relay is connected to one of output wire's inut ports too
////////////////////////////////////////////////////////////////////////////////////////////////
r.input = &w0; //relay's input bit is set to input wire
return 0;
};
這只是一個快速代碼,沒有用於連接的接口。那麼,有沒有(當然是)做這種層次結構的更好的方法,有很多鏈接在一起。這只是一個例子,因爲它仍然不處理信號,分支等等......
主要問題是使用指針將部件鏈接在一起,因爲爲此我必須跟蹤類型當解除引用指針時。所以我也可以使用void指針來實現這個......我試圖直接使用指向這些結構體的指針,但不得不製作模板,例如wire<power_supply, wire<whatever,whatever>>
對於一個導線輸入端可以連接一個電源,輸出端連接另一根導線。但是電線是一個模板,所以當我想連接多達1000根電線時,這不會帶來好的結果。如果有兩個以上的課程需要彼此參考,我還沒有找到任何好的解決方案。
儘管我並不真正瞭解/理解問題域,但在我看來,您並不需要自己對線進行建模。每個組件都有指向連接到它的其他組件的指針,並且通過該指針可以從這些連接的組件獲取信息。爲了得到這些信息,我可能會嘗試使用連接組件可以調用的多態/虛函數,從而儘量避免知道提取指針的確切類型的需要。 –
問題就像這樣用更多的類http:// stackoverflow的.com /問題/ 5493745/C聯-2-類在一起-如何。我不知道哪一堂課會和哪一堂課有聯繫。布爾電路就是一個例子,我之前也遇到過這個問題。 –