當好醇」 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