《c++设计新思维》中的模板元问题
template <class TList, class T> struct MostDerived;
template <class T>
struct MostDerived <NullType, T>
{
typedef T Result;
}
template <class Head, class Tail, class T>
struct MostDerived <Typelist <Head, Tail> , T>
{
private:
typedef typename MostDerived <Tail, T> ::Result Candidate;
public:
typedef typename Select < SUPERSUBCLASS(Candidate, Head),
Head, Candaidate> ::Result Result);
};
这段代买是来至本书的p63.
我想问的是这一行代码:
typedef typename MostDerived <Tail, T> ::Result Candidate;
是什么意思,我觉得Candidate 根本不能代表类型,代表类型的应该是::Head吧?望各位熟悉的朋友告诉一下。。。
[解决办法]
因为 MostDerived <Tail, T> ::Result 是一个类型 所以Candidate是一个类型
[解决办法]
MostDerived的两个特化版本都定义了Result 是一个类型
[解决办法]
MostDerived <Tail, T> ::Result类型的,呵呵^_^,okokok
[解决办法]
楼主还是再仔细看下吧,这部分是这本书模板元最密集的地方。
[解决办法]
递归,总会递归到一个实际的类型的.
[解决办法]
再多看几遍吧。loki的源码不是那么好懂的。
[解决办法]
理解模板的三把钥匙:
1. 编译期常量;
2. 递归;
3. 模板特化和偏特化