2013-05-18 17 views
-1

這就像函數重載。例如。它是確定要做到這一點:理論上,是否可以允許多個C++模板具有相同的名稱?

void foo(int i) { 
    ; 
} 

// Function overload ftw. 
void foo(int i, int j) { 
    ; 
} 

但它不是(還)確定要做到這一點:

template<typename T> 
class Foo { 
}; 

// Fail! 
template<typename T1, typename T2> 
class Foo { 
}; 

此功能會不會僅僅爲了避免混淆存在嗎?或者有什麼理由這實際上沒有意義?

+0

很好的參考! –

回答

1

不,在C++中不可能做到這一點。

首先查找模板,然後使參數不可能知道哪個模板是哪個模板。

它似乎像一個複製到這一個: Why is it not possible to overload class templates?

+0

我知道這是不可能的。我的問題是爲什麼不呢?這個功能沒有意義嗎?還是它沒有被指定出來?基於另一個問題(和CaptainObvious)指出,這似乎只是一個從未被指出過的問題。無論如何,謝謝你的回答! – allyourcode

1

這是不可能你寫的方式,但容易偏特辦:通過@CaptainObvlious

template <typename...> struct Foo; // don't even define 


template <typename T> 
struct Foo<T> 
{ 
    // ... "one-argument" version 
}; 

template <typename T1, typename T2> 
struct Foo<T1, T2> 
{ 
    // ... "two-arguments" version 
}; 
相關問題