我正在为相机类设计一个基类。目的是使用信号通知客户端新的可用图像。相机可能有 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
没有定义。
除了在每个派生类中定义信号和槽之外,有没有办法超越这一点?
更新:实际上不是导致问题的信号参数,而是模板中存在信号定义。如果将信号的签名更改为固定类型,则会出现相同的错误。