当好醇” c++
玩弄我开始怀疑是否有可能超载基于一个封闭的模板的模板功能。在第一层看起来这是可以实现的,但是,这怎么可以递归地完成呢?这样的下面伪C++代码超载递归基于模板参数
#include <iostream>
#include <vector>
#include <map>
template <typename T> void magic(){
std::cout << "Called magic<T>" << std::endl;
}
template <typename std::vector<T> > void magic(){
std::cout << "Called magic<std::vector<T> >" << std::endl;
magic<T>();
}
template <typename std::map<T,U> > void magic(){
std::cout << "Called magic<std::map<T,U> >" << std::endl;
magic<T>();
magic<U>();
}
int main() {
magic<std::vector<std::map<std::string,std::vector<int> > > >();
}
产生类似:
Called magic<std::vector<T> >
Called magic<std::map<T,U> >
Called magic<T>
Called magic<std::vector<T> >
Called magic<T>
原则上,这看起来并不像它应该是不可能的,因为所有类型的信息可在编译时。编译器可以轻松创建所有必需的函数,因为递归必然会停止。因此,问题:这可能吗?如果是这样,怎么样?
你想C++ 98? – cubuspl42