私はテンプレートパラメータで動作する演算子を定義するテンプレートクラスを持っています。 私はこのクラスから継承する別のクラスを持っており、演算子をもちろん継承したいと思います。C++テンプレートクラスの継承と演算子の使用
この考えてみましょう:私はタイプBのオブジェクトのための
例で宣言された事業者のいずれかを使用するように見えることはできません
template <typename T>
class A
{
public:
A(const T& x) : x_(x) {}
A operator-(const A& other)
{
A r(*this);
r.x_ -= other.x_;
return r;
}
T x() const { return x_; }
private:
T x_;
};
template <typename T>
class B : public A<T>
{
// additional stuff here
};
を:
int main()
{
// Fine
A<int> a(5);
A<int> b(2);
A<int> c = a - b;
std::cout << c.x() << std::endl;
// Won't compile :(
B<int> d(5);
B<int> e(2);
B<int> f = d - e;
std::cout << f.x() << std::endl;
return 0;
}
には、次のものがトリガされますエラー:エラー: 'A'から非スカラー型 'B'への変換が要求されました。
これはどのように機能しますか?私は本当にクラスBのすべてのコード(まったく同じ)を書き直さないようにしたい。
ありがとう!
私の場合、それはPointクラスなので、Aクラスはx、y Bクラスにはフラグ(uint32)が含まれています。私はあなたのソリューションはここで動作すると思います。私はあなたのソリューションをコンパイルすることはできません。 – zedxz
@zedxz。謝罪。今度は 'A126 'というより' A'を参照します。おそらくそれはコンパイルの問題でした。 –
Keith