???????????????????????????????????У?????????????????????????????????????????????????????????????????metaprogramming??????????????????????????д????????????μ????????Щ?′????????????????????????????????????????????Щ????????????????????????У??????????????????????????????????
????1. ??????????????????????????????
????????????????????????????????????????????????????????????????????????????template<>?????????????????????????????????????????????Σ????????????????????????
????template<typename T>
????class StackSpecialize
????{
????T m_member;
????};
????template<>
????class StackSpecialize<std::string>
????{
????std::string m_member;
????};
??????????????????????????????????????е????????
????#include "stdafx.h"
????#include <iostream>
????using namespace std;
????// ?????
????template<int N>
????struct Fib
????{
????enum {Result = Fib<N-1>::Result + Fib<N-2>::Result};
????};
????// ???????????????????
????// ???????棬????N=1?????
????template<>
????struct Fib<1>
????{
????enum {Result = 1};
????};
????// ???????棬????N=0?????
????template<>
????struct Fib<0>
????{
????enum {Result = 0};
????};
????int _tmain(int argc?? _TCHAR* argv[])
????{
????int i = Fib<500>::Result;
????std::cout<<i<<std::endl;
????return 0;
????}
??????????????????????е???????????????Fib<500>??enum Result????????????Fib<499>??Fib<498>?????????????????и??????N=1??N=0??????????????????Fib<1>??Fib<0>??????????汻????????????????????????????????????????????C++?????????????17???????????????????VS???????????????VS?????500?Σ?501?μ??????Error 1 error C1202: recursive type or function dependency context too complex??
???????????????????????????????????????????????????б???????????????У?????????A??????B??????C???????????????????????????????????????????????????????B?????????C????????????????????????????????????????????VS??gcc?????????????????????????????????????????????????typedef??????????????????????嶨?????typedef????????C++????????????????????塣
????// ??????壺?????1????Σ????????????2????Σ??????3?????
????template<bool C?? typename Ta?? typename Tb>
????class IfThenElse;
????// ??????
????template<typename Ta?? typename Tb>
????class IfThenElse<true?? Ta?? Tb> {
????public:
????typedef Ta ResultT;
????};
????// ??????
????template<typename Ta?? typename Tb>
????class IfThenElse<false?? Ta?? Tb>
????{
????public:
????typedef Tb ResultT;
????};
????2. ??????????????????????
?????????????????????????????????????????????????????????????????????????????д???????????д???????????????????汾????????????????????????
????????????岻????????????????????????????????????????????????????????????????????仯???????????????????????????????????????????????????????δ????????????????????д???????????????????????????Qt??????????????????????????????????????????????? moc ??Meta-Object Compiler??“??????????”?????? C++ ?????????????????????????а?????? Q_OBJECT???????????????? C++ ??????????????а????? Q_OBJECT ?????????????μ????????????????????????? moc_ ???ɡ?????μ??????????????????????????????????????????