簡體   English   中英

可轉換類型之間的聚合模板特化

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM