小编Sim*_*one的帖子

函数作为模板参数问题

我有这个问题困扰我.我有FSM类,它将键与回调相关联

class FSM
{
public:

typedef bool (FSM::*InCallback_t)( int );
typedef std::map< std::string, InCallback_t > Table;

// Since I would like to allow the user to register both functors and class member    functions
template< typename Callback_t, bool (Callback_t::*CallbackFunct_t)(int) >
bool callback( int x )
{
    return (Callback_t().*CallbackFunct_t)( x );
}

void addCallback( const std::string& iKey, InCallback_t iCallback )
{
    _table.insert( std::make_pair( iKey, iCallback ) );
}

    [ ... ]

private:
    Table _table;
};
Run Code Online (Sandbox Code Playgroud)

还有一些回调类

class CallbackBase
{
public:

    bool operator()( …
Run Code Online (Sandbox Code Playgroud)

c++ templates

7
推荐指数
1
解决办法
1287
查看次数

面向对象设计问题,Liskov替换原理

我正在设计一个OO框架,我面临着以下问题.

让我们说在框架中我有一个Shape接口,用户可以自由地实现和扩展(添加新函数)Shape接口来创建自己的数字,例如SquareCircle.要使这些新对象可用,用户必须将它们注册到ShapeFactory中,以指定形状(字符串)和对象的名称.

此外,该框架提供了一个名为ShapeWorker的接口,它定义了以下函数:

class ShapeWorker
{
public:
  void processShape( Shape& shape ) = 0;
};
Run Code Online (Sandbox Code Playgroud)

用户可以自由地实现ShapeWorker接口来制作特定的形状工作者,例如SquareWorkerCircleWorker.要使这些新对象可用,用户必须将它们注册到WorkerFactory,指定形状(字符串)和对象的名称.

在某个时刻,框架给定一个表示形状名称的字符串,通过使用ShapeFactory创建一个新的Shape,然后(代码中的其他地方)通过使用具有相同形状名称的WorkerFactory创建一个新的ShapeWorker.该processShape,然后调用提供的形状之前创建的实例.

[ ... ]
Shape* myShape = shapeFactory.create( shapeName );
[ ... ]
ShapeWorker* myWorker = workerFactory.create( shapeName );
myWorker->processShape( *myShape );
[ ... ]
Run Code Online (Sandbox Code Playgroud)

关键是,这样做,我强迫用户实现,例如,SquareWorkerShapeSquare进行向下转换为 …

c++ oop

3
推荐指数
1
解决办法
768
查看次数

标签 统计

c++ ×2

oop ×1

templates ×1