Załóżmy, że mam następujące klasy:C++ wydedukować argumenty szablonu na podstawie innych argumentów szablonu
template <class T, class U, class V> Foo
{
...
};
Parametry szablonu mają wyraźną mapowanie, więc mogę wywnioskować inne argumenty szablonów U i V w oparciu o to, co T . Na przykład, jeśli T jest podwójne, U i V zawsze będą niektórymi klasami D1 i D2, a jeśli T jest zmiennoprzecinkowe, U i V będą zawsze innymi klasami F1 i F2.
Mając to na uwadze, czy istnieje sposób, w jaki mogę przekazać tylko jeden argument szablonu i czy kompilator dedukuje pozostałe dwa parametry?
Wiem, że prostą odpowiedzią byłoby po prostu uczynienie tych innych klas również szablonami i przekazanie im argumentu szablonu T, ale nie jestem w stanie uczynić tych klas szablonami (są one generowane automatycznie przez narzędzie).
Idealnie chciałbym móc używać typedef lub #define tak:
typedef Foo<double> Foo<double, D1, D2>
typedef Foo<float> Foo<float, F1, F2>
Jednak to nie skompilować. Zastanawiam się, czy istnieje sposób użycia metaprogramowania szablonów lub parametrów szablonów szablonu, aby rozwiązać ten problem, ale nie mogę zakryć głowy tymi koncepcjami i mam przeczucie, że prawdopodobnie istnieje jeszcze prostsza odpowiedź. Ktoś ma jakieś pomysły?
Dzięki! To działa idealnie. – thompsonja
@thompsonja: Cieszę się, że pomogło :-) –