peo*_*oro 6 c++ templates ambiguity specialization
我有一个特质课,我需要多次专攻(和部分特化).
一些部分专业化重叠:
template< typename T > struct C { };
template< typename T1, typename T2 > struct TRAIT { };
template< typename T > struct TRAIT< T, T > { };
template< typename T1, typename T2 > struct TRAIT< C<T1>, C<T2> > { };
int main( ) {
// ERROR! could be both TRAIT<T,T> [with T = C<int>]
// and TRAIT<T1,T2> [with T1 = T2 = int]
TRAIT< C<int>, C<int> > foo;
return 0;
};
Run Code Online (Sandbox Code Playgroud)
我怎么能用工作代码获得相同的结果?
我疯了同enable_if和is_same,我甚至不能确定了这是正确的方式...
如果您无法避免重叠专业化,那么您最好的选择就是澄清所有重叠.你需要写另一个专业
template< typename T> struct TRAIT< C<T>, C<T> > { };
Run Code Online (Sandbox Code Playgroud)
......但是,正如其他人在评论中所说的那样,最好尽量避免重叠.正如其他人所说,问题可能不是重叠专业化,可能这不是解决问题的最佳方法.