だから私はC++テンプレートがどのように機能するかを理解しようとしていますが、あまり運がありません. 以下のテンプレートを作成しました。
template<class TValue>
class Value {
public:
virtual ~Value();
inline TValue value() const { return _value; }
virtual int serialize(unsigned char* buffer, int bufferSize) const = 0;
protected:
Value(TValue value, const ValueType& valueType) : _value(value), _valueType(&valueType) {}
private:
TValue _value;
ValueType* _valueType;
};
template<class TValue>
class NumericValue : public Value<TValue> {
protected:
NumericValue(TValue value, const ValueType& valueType) : Value<TValue>(value, valueType) {}
};
そして、作成したクラスがあります:
class U16Value : public NumericValue<u16> {
public:
U16Value(u16 value) : NumericValue<u16>(value, ValueType::U16) {}
}
残念ながら、これはコンパイルされません。次の行でエラーが発生します。
Value(TValue value, const ValueType& valueType) : _value(value), _valueType(&valueType) {}
それは言います:
error: invalid conversion from const tnp::ValueType* to tnp::ValueType* [-fpermissive]
なぜこれが起こっているのか教えてもらえますか?
ありがとう。