カメラクラスの基本クラスを設計しています。その意図は、シグナルを使用して、新しく利用可能なイメージをクライアントに通知することです。カメラには、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
。つまり、CaptureSig::slot_type
はその時点では定義されていません。
各派生クラスでシグナルとスロットを定義する以外に、これを超える方法はありますか?
更新: 実際には、問題を引き起こしているのはシグナルのパラメーターではなく、テンプレート内のシグナル定義の存在です。信号の署名が固定タイプに変更された場合、同じエラーが発生します。