/
niceSOFT
/
swig
Обзор
Документация
Войти
/
niceSOFT
/
swig
Код
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Examples/test-suite/template_specialization_using_declaration.i
73 строки
2 KB
William S Fulton
Add testcase for using declarations and templates
09 июл 2023, 17:56
09 июл 2023, 17:56
30e6862
Код
Авторство
О чём код?
%module template_specialization_using_declaration %include <std_string.i> %inline %{ class ConcreteClass { int val; public: ConcreteClass(int i = 0) : val(i) {} int concrete_value() { return val; } }; namespace Space { // primary template class template<typename T> struct BaseTemplate { void method_primary(T t) {} virtual ~BaseTemplate() {} protected: void method_primary_hidden(T t) {} }; // specialized template class template<typename T> struct BaseTemplate<T *> { void method_specialization(T t) {} virtual ~BaseTemplate() {} protected: void method_specialization_hidden(T t) {} }; // partially specialized template class template<> struct BaseTemplate<int> { void method_partial_specialization(int i) {} virtual ~BaseTemplate() {} protected: void method_partial_specialization_hidden(int t) {} }; } %} %template(BaseTemplateString) Space::BaseTemplate<std::string>; %template(BaseTemplateConcreteClass) Space::BaseTemplate<ConcreteClass *>; %template(BaseTemplateInt) Space::BaseTemplate<int>; %inline %{ namespace Space { // primary template class template<typename T> struct DerivedTemplate : BaseTemplate<T> { void method_primary_derived(T t) {} virtual ~DerivedTemplate() {} using BaseTemplate<T>::method_primary_hidden; }; // specialized template class template<typename T> struct DerivedTemplate<T *> : BaseTemplate<T *> { void method_specialization_derived(T t) {} virtual ~DerivedTemplate() {} using BaseTemplate<T *>::method_specialization_hidden; }; // partially specialized template class template<> struct DerivedTemplate<int> : BaseTemplate<int> { void method_partial_specialization_derived(int i) {} virtual ~DerivedTemplate() {} using BaseTemplate<int>::method_partial_specialization_hidden; }; } %} %template(DerivedTemplateString) Space::DerivedTemplate<std::string>; %template(DerivedTemplateConcreteClass) Space::DerivedTemplate<ConcreteClass *>; %template(DerivedTemplateInt) Space::DerivedTemplate<int>;