首先,我很抱歉這個問題的模糊標題。我不確定如何總結它。C++模板專精/重載
我想實現的是以下內容,我希望能夠將不同類型的模板非類型參數傳遞給同一個類模板,從而導致不同的實例化。事情是這樣的:
Foo<1>();
Foo<'1'>(); // different types of object
我不認爲這是可能的,所以我不得不做這樣的事情
template <typename T, T Val>
struct Foo;
template <int Val>
struct Foo<int, Val>
{};
template <char Val>
struct Foo<char, Val>
{};
//...
Foo<int, 1>();
Foo<char, '1'>();
這樣Foo
可以基於第一模板參數專業化。然而,這使我想在元編程框架中實現的迷你語言的語法複雜化。有沒有什麼技術可以讓我從Foo<'1'>
區分Foo<1>
?基本上我想要做的就是設置一個編譯時標誌(在一個枚舉中)來指示是否傳遞了一個int
或char
,但沒有明確指定它們。
編輯 的回答讓我意識到,我的問題暗示,我真的需要(編譯時),這些對象的實例。我不...
假設標準允許我重載一個類模板,使得Foo<1>
和Foo<'1'>
是不同的類型,並且它們的flag
字段包含不同的值。這些類型的可再自行傳遞到另一個類模板,它可以檢查他們,做有趣的東西吧,比如:
template <typename FooType>
struct Bar
{
typedef typename If < FooType::flag, int, char >::Type Type;
};
這是非常容易的,當你對明確地傳遞類型無關,但這似乎是多餘的...
呵呵,我從來沒有想過這個。 +1 –
我也沒有,直到我需要它;-) – JorenHeit
這看起來像[我的問題](http://stackoverflow.com/q/9400581/212858)更常見的情況下,其答案恐怕waasn't鼓勵 – Useless