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>,只要U可转换为T.

于 2012-06-23T04:49:26.570 回答
0

你试图做的不是一个好主意。
但是,要克服编译器错误,您可以专门化该类 -

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