Re: частичная специализация шаблона внутри класса
От: Сыроежка  
Дата: 21.12.11 20:55
Оценка:
Здравствуйте, innochenti, Вы писали:

I>
I>#include <iostream>
I>template<class U, int index>
I>struct Index
I>{
I>        template<class Z, int T> 
I>        struct Helper;
 
I>        template<class Z>
I>        struct Helper<Z,index>
I>        {
I>                static const int value = 1;
I>        };
 
I>        template<class Z, int T>
I>        struct Helper
I>        {
I>                static const int value = 0;
I>        };
 
I>        static const int value = Helper<U,1>::value;
I>};
 
I>int main()
I>{
I>Index<int,1> j;
I>std::cout << j.value << std::endl;
I>return 0;
I>}
I>


I>в студии 2010 результат равен 0.

I>а в http://ideone.com/n1tXs
I>результат равен 1.

I>Объясните, пожалуйста, в чем подвох.


Я упростил ваш пример, убрав первый шаблонный параметр. И у меня в студии 2010 выводит 1, а не 0, если создавать объект как Index<1> i;. Ежели создавать объект как Index<2> i;, то выводит 0.

Вот упрощеннный вариант:


#include "stdafx.h"
#include    <iostream>

template <int x>
struct Index
{
    template <int y>
    struct Helper;

    template <>
    struct Helper<x>
    {
        static const int value = 1;
    };

    template <int y>
    struct Helper
    {
        static const int value = 0;
    };

    static const int value = Helper<1>::value;
};

int _tmain(int argc, _TCHAR* argv[])
{
    Index<1> i;
    std::cout << "Index::i = " << i.value << std::endl;
}
Меня можно встретить на www.cpp.forum24.ru
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.