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。つまり、CaptureSig::slot_typeはその時点では定義されていません。

各派生クラスでシグナルとスロットを定義する以外に、これを超える方法はありますか?

更新: 実際には、問題を引き起こしているのはシグナルのパラメーターではなく、テンプレート内のシグナル定義の存在です。信号の署名が固定タイプに変更された場合、同じエラーが発生します。

4

0 に答える 0