如何在以下代码中修复转换错误?

时间:2012-06-23 04:10:43

标签: c++ templates type-conversion copy-constructor

我有一个模板类:

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

你要做的不是个好主意 但是,为了克服编译器错误,您可以专门化类 -

template <>
class A<float>
{
    public:
    A(A<double> const & o) {}
};