[英]Aggregated template specialisation between convertible types
考慮這些模板類:
template <typename T>
class A{
T m_t;
public:
A(T t):m_t(t){};
};
template <typename T, typename D>
class B{
A<D> m_a;
T m_t;
public:
B(T t, A<D> a):m_t(t),m_a(a){};
};
這當然會起作用: A<int> a{1};
.
這也將起作用,因為隱式轉換: A<int> a{'e'};
但這不會:
A<char> a{'e'}
B<int,int> b(1,a)
有什么解決方法嗎? 在實例化 B class 時,我希望 char 和 int 之間進行隱式轉換。
A<char>
和A<int>
是兩個完全獨立的類。 但是您始終可以將相應的轉換構造函數添加到A
模板中:
template <typename U>
A(A<U> a) : m_t(a.m_t) { }
template <typename U> friend class A;
現場演示: https://godbolt.org/z/xejPz5KM9
請注意,您需要通過該friend
聲明向A
的所有實例提供對私有成員m_t
的訪問。 否則, A<U>
通常將無法訪問A<T>.m_t
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.