0

テンプレートクラスがあります:

template<class T>
class A{
  T a, b;
  public:
  A(A<T> const & o) : a(o.a), b(o.b){}
  A(T const & _a, T const & _b) : a(_a), b(_b){}
};

A<double> d(1.2, 4.5);
A<float> f = d; //error: conversion from A<double> to non-scalar type A<float> requested

クラスの変換関数を定義するにはどうすればよいですか? 私のコンパイラは g++ 4.7.0 です

4

2 に答える 2

4

テンプレート コンストラクタを作成できます。

template<class T>
class A{
    T a, b;
public:

    template<class U>
    A(A<U> const & rhs) : a(rhs.a), b(rhs.b) {}

    A(T const & _a, T const & _b) : a(_a), b(_b){}
};

次に、に変換可能である限り、任意のクラスA<U>を任意のクラスに変換できるはずです。A<T>UT

于 2012-06-23T04:49:26.570 に答える
0

あなたがやろうとしていることは良い考えではありません。
ただし、コンパイラ エラーを克服するために、クラスを特殊化することができます -

template <>
class A<float>
{
    public:
    A(A<double> const & o) {}
};
于 2012-06-23T04:27:26.930 に答える