我正在为相机类设计基类。目的是使用信号通知客户新的可用图像。相机可能具有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>
派生一个类时,slot_type
上的typedef上存在编译错误,首先是:“缺少;在标识符CaptureSlot之前”。也就是说,此时未定义CaptureSig::slot_type
。
除了在每个派生类中定义信号和槽之外,还有办法超越这个吗?
更新: 它实际上不是引起问题的信号的参数,它是模板中信号定义的存在。如果信号的签名更改为固定类型,则会出现相同的错误。