Re: nested template partial specialization
От: frogkiller Россия  
Дата: 03.10.07 05:54
Оценка:
Нашёл в сети workaround:
#include <iostream>

struct FirstSelector {};
struct SecondSelector {};

struct Foo {};

template <typename T>
struct Bar
{
       template <typename U, typename U2 = void>
       struct Nested;

       template <typename U2>
       struct Nested<FirstSelector, U2>
       {
              void test();
       };
       template <typename U2>
       struct Nested<SecondSelector, U2>
       {
              void test();
       };

       Nested<FirstSelector> m_first;
       Nested<SecondSelector> m_second;
       
       void test()
       {
            m_first.test();
            m_second.test();
       }
};

template <typename T> template <typename U2> 
void Bar<T>::Nested<FirstSelector, U2>::test()
{
     std::cout << "first" << std::endl;
}
template <typename T> template <typename U2> 
void Bar<T>::Nested<SecondSelector, U2>::test()
{
     std::cout << "second" << std::endl;
}

int main(int argc, char *argv[])
{
    Bar<Foo> bar;
    bar.test();
    
    return 0;
}

Но имхо это выглядит довольно криво.
Курица — это инструмент, с помощью которого одно яйцо производит другие.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.