小编per*_*son的帖子

为什么这些模板不明确?

C++模板:完整指南在第275页有一个例子,我无法绕过头脑.

引用书中的摘录......

template <typename T>
class Promotion<T,T> {
  public:
    typdef T ResultT;
};

template<typename T1, typename T2>
class Promotion<Array<T1>, Array<T2> > {
  public:
    typedef Array<typename Promotion<T1,T2>::ResultT> ResultT;
};

template<typename T>
class Promotion<Array<T>, Array<T> > {
  public:
    typedef Array<typename Promotion<T,T>::ResultT> ResultT;
};
Run Code Online (Sandbox Code Playgroud)

不幸的是,部分专业化Promotion<Array<T1>, Array<T2> >既不比专业化更专业化也更不专业化 Promotion<T,T>.为避免模板选择模糊,添加了最后的部分特化.它比前两个部分特化中的任何一个都更专业.

为什么前两个模板不明确,为什么最后一个模板解决了模糊问题?当我尝试应用规则时,我或者无法弄清楚它是如何产生歧义的,或者如果我认为我有办法让它发生,我不知道为什么最后一个模板解决了问题.

c++ templates

6
推荐指数
1
解决办法
1927
查看次数

标签 统计

c++ ×1

templates ×1