LINUX.ORG.RU

[C++][template] Частичная специализация шаблонного класса

 ,


0

1

Всем привет.

Имеется описание

template<class T, class S = Default<T>>
class Work
{
        public:
                Work( const T &t )
                {
                        S::start ( t );
                        S::stop ( t );
                }
};

Work<string,SettingsSpecial<string>> mySThread ( "thread1" );
Цель : сделать частичную специализацию для class T, например int

пишу:

template<>
class Work<int>
{
        public:
                Work ( const int &t )
                {
                        cout << "oops" << endl;
                }

};
результат:

Work<int> t1 ( 2 );
Work<int,OtherSettings<int>> t2 (7);

t1 отлично «попадает» в специализацию, t2 нет.

Окей, понимаю что компилятор идет по ветке:

class Work<int,class S = Default<int>>

но, т.к. хз как это вообще правильно делать, то всякие потуги типа:

template<class S> class Work<int> { ... }
или
template<> class Work<int,class S<int>> {...}

естественно, не компилятся =(

Искал в Страуструпе от 2011, у Саттера, в гугле, нигде примеров такой темы не нашел.

Можно ли воопще описать специализацию для class T, равному какой либо MyClass (в отрывках листинга у меня int), так чтобы неважно какой class S использовался дефолтовый или отличный от него? Если да то как?

Спасибо.

★★★

Ответ на: комментарий от yoghurt

да, компилится с опцией -std=c++0x

fura13 ★★★
() автор топика
Ответ на: комментарий от ratatosk

от оно как, спасибо большое!

fura13 ★★★
() автор топика
Ответ на: комментарий от ratatosk

Опередил.

Интересно, почему ТС аккуратно прошёлся вокруг очевидного правильного варианта, так на него и не наткнувшись.

Miguel ★★★★★
()
Ответ на: комментарий от Miguel

потому что нуб и первый раз с таким столкнулся )

fura13 ★★★
() автор топика
Ответ на: комментарий от mi_estas

Нет.

error: default template arguments may not be used in partial specializations
Что логично.

ratatosk
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.