开发平台(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 以上的方法也可以