例如,以鏡像pair < int , float >
到pair < float , int >
,我可以創建一個模板函數是這樣的:是否有通用的方法來鏡像一對(配對<A,B>配對<B,A>)?
template<class AB,class BA>
void mirror(const AB& ab,BA& ba){
ba.first=ab.second;
ba.second=ab.first;
}
int main(){
pair<int,float> ab;
ab.first=3;
ab.second=2.0;
pair<float,int> ba;
mirror<decltype(ab),decltype(ba)>(ab,ba);
printf("%d\n",ba.second);
return 0;
}
但這種方法不能處理在另一對的一對,例如:
pair < bool , pair< int , float > >
到pair < pair < float , int > , bool >
:
pair<bool,pair<int,float> > a_bc;
pair<pair<float,int>,bool> cb_a;
mirror<decltype(a_bc),decltype(cb_a)>(a_bc,cb_a);
pair < pair < A , B >, pair < C , D > >
到pair < pair < D , C > , pair< B , A > >
:
pair<pair<A,B>,pair<C,D> > ab_cd;
pair<pair<D,C>,pair<B,A> > dc_ba;
mirror<decltype(ab_cd),decltype(dc_ba)>(ab_cd,dc_ba)
是否可以編寫鏡像模板函數(例如:2個鏡像函數模板,一個用於配對,另一個用於非對,然後使用遞歸),可以處理上述所有情況?
此mehtod即可;噸處理任何T1 = T2,其中T1,T2是類型對 –
的!可能您可以檢測到一個模板參數是否配對(它具有first_type和second_type typedefs),然後您可以進行遞歸調用。但是這實際上並不意味着參數是一對的......我不確定它是否能夠以一種很好和安全的方式解決。 – Melkon