我有一个模板类:
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
答案 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) {}
};