開發平台(Platform): (Ex: Win10, Linux, ...)
WIN10 / LINUX
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
VC2015 / gcc
問題(Question):
想要用C++來跑模擬
目前是將參數的部分定義在一個class/structure類似header的概念
其中部分參數希望拿來當靜態配置變數的array長度
問題在於,GCC雖然支援靜態配置長度是給變數,然而VC比較嚴謹
還不允許這種寫法,一定要是定值
目前做法就是用define的方式
使用class/structure 來管理 系統變數的原因
1. 讓變數找的到哪裡宣告的(當IDE不夠強的時候)
(補充,某些因素,在linux環境下IDE不怎麼好用)
2. 可以加上const保證這些變數都不會被其他function修改。
目前是所有參數都是public
但是現在希望讓變數整理再一起,有一個統一的規範
現在是將起始值放在建構子裡
問題是,希望讓VC能直接吃class的變數的長度又不使用動態配置
因為靜態配置的優點是可以直接用sizeof(class)計算長度,
然後用指令直接寫入檔案之類的存起來,而不用對裡面所有變數個別處理
也是希望類似
class A{
const int abc;
A(){
abc = 10;
}
}
然後讓整個 class A都無法更動。
網路上看到的方法貌似是宣告同時給值
class A{ .abc = 10};
然而如果變數超多就會看起來很長
原本用structure的目的是為了讓每個變數能夠知道原本放在哪
同時利用傳入變數時加上const使之只能讀不能改
想到另一種解法是宣告在namesapce裡面
然後所有的變數都加上const
用structure的優點是,如果要兩個模擬環境,可以宣告兩個,不過目前沒有這樣需求
用namespace是 可以加上const外,也可以讓變數找的到宣告的地方
(補充說明,目前的環境沒辦法利用tool幫忙找使用的變數原本宣告在哪)
為了一致性,structure還能有別種作法嗎?
因為使用namespace,如果要將變數儲存就必須對每個變數個別處理,
如果是使用structure要儲存,因為sizeof()的關係,可以一行就存起來