Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > специализация на класс и всех его наследников?


Автор: victor79 25.8.2013, 16:27
можно ли сделать специализацию класса такую, что бы она действовала для определенного класса и всех его наследников?

Автор: bsa 26.8.2013, 12:06
victor79, вопрос не содержит информации, необходимой для ответа. Пример желаемого использования покажи.

Автор: victor79 31.8.2013, 04:54
Код

#include <stdio.h>

class MyClass {
};

class MyClass2 : public MyClass {
};

template <class A>
struct calc {
    static void do_something() { printf("common\n"); }
};

template <>
struct calc<MyClass> {
    static void do_something() { printf("class MyClass\n"); }
};

int main() {
     calc<int>::do_something();
     calc<MyClass>::do_something();
     calc<MyClass2>::do_something();
}


в данном примере calc<MyClass2>::do_something выполняет то же, что и calc<int>::do_something. А как бы так сделать, что бы раз я объявил специализацию struct calc<MyClass>, то и calc<MyClass2> в нее же попала, т.к. MyClass2 является наследником от MyClass.


Автор: bsa 2.9.2013, 16:00
Если не ошибаюсь, то никак.

Автор: akizelokro 2.9.2013, 16:26
Цитата(victor79 @  25.8.2013,  16:27 Найти цитируемый пост)
можно ли сделать специализацию класса такую, что бы она действовала для определенного класса и всех его наследников? 


есть какие-то возможности с typeof, надо учесть его возможную непереносимость.  

Но и это тоже вилами ещё на воде писано
Или в теле функции сделать приведение чтоли  к базовому классу. Если нельзя, то компилятор сругнётся небось



Автор: VSB 2.9.2013, 23:22
Можно
http://stackoverflow.com/questions/2968380/smplest-way-to-provide-template-specialization-for-derived-classes
http://stackoverflow.com/questions/13580072/specializing-a-class-template-by-a-base-classs

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)