parametr szablon można wykorzystać w inny parametr szablonu, która następuje to w ten sposób:Jak używać parametru szablonu w inny parametr szablonu zadeklarowane przed
template<typename T, T N>
struct s
{
};
ale jest to możliwe do odniesienia „T” jeśli jest to zadeklarowane po "N"?
To nie działa:
template<T N, typename T>
struct s
{
};
Możemy pomóc kompilator przez pre-deklarując "T" lub cokolwiek innego?
Dzięki z góry.
EDYCJA: ponieważ dwie pierwsze odpowiedzi dotyczyły pytania "dlaczego chcesz to zrobić?" Wyjaśnię cel:
Chciałbym, aby kompilator wywnioskował typ "T", aby ułatwić korzystanie z szablonów.
Na przykład:
template<typename T, T A, T B>
struct sum
{
static T const value = A + B;
};
Ten szablon może być używany w ten sposób:
sum<int, 1, 2>::value
Ale byłoby lepiej, gdyby mógł on być stosowany w ten sposób:
sum<1, 2>::value
Technicznie powinno być możliwe, ponieważ kompilator zna typy "1" i "2": "int", i faktycznie używa tych inf oracje, aby znaleźć najlepsze przeciążenie dla funkcji. Więc deklarując szablonowi ten sposób:
template<T A, T B, typename T>
struct sum
{
static T const value = A + B;
};
kompilator może wykorzystać swoją zdolność do wywnioskować ostatni parametr z informacji dostarczonych przez pierwszy i drugi, a następnie znaleźć najlepszy szablon instancji.
Dzięki za odpowiedź: jeśli norma mówi, że nie, to nie. Pytanie brzmi teraz: dlaczego to ograniczone zachowanie, podczas gdy wydaje się możliwe dokonanie tego odliczenia? Czy masz kilka przykładów uzasadniających tę decyzję? Dzięki. – Pragmateek
Ponieważ metaprogramowanie szablonów nigdy nie miało być wyraziste? :) Ciekawe pytanie. Być może powinieneś sprawdzić, czy zostało to zaproponowane, lub złożyć tę propozycję dla C++ 1x. – UncleBens