我有一個實現大多數操作的類A.另外,我有另一個只包含A成員的B類。我希望A中的操作可以直接應用於B.所以我定義了一個轉換操作。但編譯器抱怨「錯誤:沒有匹配函數調用'foo'」。隱式轉換和如何實現這個有什麼問題?謝謝。模板函數的隱式轉換
編輯:如果我將操作符重載添加到A並希望B直接使用它會怎麼樣?
template <typename T> struct B;
template <typename T>
struct A {
A(const B<T>& b) {} // Conversion from B to A, way 1
friend void foo(const A&);
// Addition
friend A operator+(const A&, const A&);
};
template <typename T>
void foo(A<T>& a) {}
// Addition
template <typename T>
A<T> operator+(const A<T>& a1, const A<T>& a2) { return A<T>(); }
template <typename T>
struct B {
B() {}
A<T> a;
operator A<T>() { return a; } // Conversion from B to A, way 2
// Addition
B(const A<T>& a) : a(a) {}
};
int main()
{
B<int> b;
foo(b);
auto bb = b+b;
}
'foo'是一個模板。你用一種需要論證推論的方式來稱呼它。不能轉換。 – StoryTeller
@StoryTeller我需要什麼才能使它正確 – zhangwfjh