1

我正在为相机类设计一个基类。目的是使用信号通知客户端新的可用图像。相机可能有 8 位或 16 位像素。我正在尝试将它们模板化如下:

#include <boost/signals2.hpp>
#include <boost/cstdint.hpp>

template<typename PX>
class ICamera
{
public:
    typedef PX pixel_type;
    typedef PX const *pFrame;

    typedef boost::signals2::signal<void (ICamera &cam, pFrame buffer)> CaptureSig;
    typedef CaptureSig::slot_type CaptureSlot;   /* error on this line */
    virtual boost::signals2::connection AddCaptureListener(CaptureSlot slot) = 0;
};

在 MSVS 2008 中,当我从 派生一个类时ICamera<uint8_t>,在 typedef 上存在编译错误slot_type,首先是:“缺少;在标识符 CaptureSlot 之前”。也就是说,此时CaptureSig::slot_type没有定义。

除了在每个派生类中定义信号和槽之外,有没有办法超越这一点?

更新:实际上不是导致问题的信号参数,而是模板中存在信号定义。如果将信号的签名更改为固定类型,则会出现相同的错误。

4

0 回答 0