開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
ubuntu gcc c++11
問題(Question):
寫類神經網路的時候時常要把層轉型
想問把cast寫成macro會不會太偷懶
或是有更好的做法
*[36m程式碼(Code):(請善用置底文網頁, 記得排版) *[m
//定義
class BaseLayer{};
class InputLayer : public BaseLayer{};
class HiddenLayer : public BaseLayer{};
class OutputLayer : public BaseLayer{};
//把層轉成Base存在vector
std::vector<BaseLayer*> Network;
Network.push_back(new InputLayer(args) );
Network.push_back(new HiddenLayer(args) );
Network.push_back(new OutputLayer(args) );
//要調用的時候就得
static_cast<InputLayer*>(Network[0])->input = GetInput();
static_cast<HiddenLayer*>(Network[1])->DoSomething;
static_cast<OutputLayer*>(Network.back())->output;
現在打算定義macro 讓事情簡單一點
#define GET_INPUT( x ) static_cast<InputLayer*>( (x)[0] )
#define GET_HIDDEN( x , i ) static_cast<HiddenLayer*>( (x)[(i)] )
#define GET_OUTPUT( x ) static_cast<OutputLayer*>( (x).back() )
這樣調用只需要,看起來也比較清楚
GET_INPUT( Network )->DoSomething;
...
而且本來Network也不只是個vector
實際用起來會在多一層 比較難看
補充說明(Supplement):
c++11 以上的方法也可以