Mam problem ze specjalizowaniem szablonu wewnętrznego, gdy wszystkie jego parametry są znane. Oto przykład:Specjalizujący szablon wewnętrzny z domyślnymi parametrami
template < typename T0 >
struct outer
{
template < typename T1 = void, typename T2 = void >
struct inner
{
typedef T1 type;
};
};
template < typename T0 >
template < typename T1 >
struct outer<T0>::inner<double,T1> { typedef int type; };
Działa to dobrze. Gdybym zamiast określić wewnętrzną szablonu jak tak, to nie:
template < typename T0 >
template < >
struct outer<T0>::inner<double,void> { typedef int type; };
Do tego pojawia się komunikat o błędzie „Nieprawidłowy wyraźnej specjalizacji przed«>»tokena ... załączając szablony klasy nie są wyraźnie wyspecjalizowane .. .template parametry nie używane w częściowej specjalizacji: ... T0 ". Nie wiem, czy WTAF się tutaj dzieje.
Próbowałem też tak:
template < typename T0 >
struct outer<T0>::inner<double,void> { typedef int type; };
Spodziewałem to się nie powiedzie, a komunikat o błędzie nie jest zaskakujące. Było to "zbyt mała liczba list parametrów".
A więc, jaki jest właściwy sposób na zrobienie tego? Mogę oczywiście się do tego przyzwyczaić, ale jeśli nie będę, wolałbym nie.
powiązane: http://stackoverflow.com/questions/9219157/why-cant-i-specialize-the-nested-template -member-bez-wyspecjalizowanych-obejmujących? lq = 1 –
Hmm ... Poszukałem, ale to się nie ukazało. Przed tym nie musieli poświęcać właściwego gatunku kozy. –