2012-06-23 52 views
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

+0

你試圖把一個雙浮點 –

+0

你可能不想被轉換成實際代碼中的較低精度類型 –

+0

@MateuszKowalczyk,你是對的。這只是我在學習模板時寫的測試程序。 – badmaash

回答

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

0

你試圖做的不是一個好主意。
但是,要在編譯器錯誤,你可以專門類 -

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