Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Base
- {};
- class Derived : public Base
- {};
- template <class T, class Enabler=void>
- class Partialy
- {
- public:
- void say()
- {
- std::cout << "Partialy Default" << std::endl;
- }
- };
- template <class T>
- class Partialy<T, typename std::enable_if<std::is_base_of< Base, T >::value>::type>
- {
- public:
- void say()
- {
- std::cout << "Partialy special" << std::endl;
- }
- };
- template <class T>
- class BaseTpl
- {};
- class DerivedTpl : public BaseTpl<int>
- {};
- template <class T, class Ta>
- class Partialy<T, typename std::enable_if<std::is_base_of< BaseTpl<Ta>, T >::value>::type>
- {
- public:
- void say()
- {
- std::cout << "Partialy special with TPL" << std::endl;
- }
- };
- class A1 : public BaseTpl<int>
- class A2 : public BaseTpl<std::string>
- class A3 : public BaseTpl<vector<int> >
- ...
- class DerivedTpl : public BaseTpl<int>, public BaseTpl<char>
- {};
- class BaseNonTpl {};
- template <class T>
- class BaseTpl : BaseNonTpl
- {};
- template <class T>
- class PartialyTpl<T, typename std::enable_if<std::is_base_of< BaseNonTpl, T >::value>::type>
Add Comment
Please, Sign In to add comment