テンプレートクラスの宣言に問題があります。私は、多くの読みにくく、無意味な組み合わせを試しました。
template <class C, class M >
class BlockCipherGenerator : public KeyGenerator
{
...
private:
M < C > m_cipher;
};
そして
template <class C, class M >
class BlockCipherGenerator : public KeyGenerator
{
typedef typename C::value_type CIPHER;
typedef typename M::value_type MODE;
private:
MODE < CIPHER > m_cipher;
};
それはそれが言うことです。
あなたのテンプレートパラメータリストは M
はclass
であり、template
ではないことを示しています。
それがクラスtemplateであると言う場合、 それですべてうまくいく :
template <class C, template <class C> class M>
class BlockCipherGenerator : public KeyGenerator
{
M<C> m_cipher;
};
std::vector
はクラスではなくですが、クラステンプレートです。何かのようなもの std::vector<int>
はクラス(タイプ)です。