Симуляция частичной специализации по виду аргумента шаблона

We use cookies. Read the Privacy and Cookie Policy

Симуляция частичной специализации по виду аргумента шаблона

Использовать полученную метафункцию IsPointer‹T› для симуляции частичной специализации по виду аргумента шаблона можно примерно следующим образом:

// Реализация общего случая: T не является указателем.

template‹class T›

class C_ {

 //…

};

// Реализация случая, когда T является указателем.

template‹class T›

class C_ptr_ {

 //…

};

// Traits для случая, когда T является указателем

template‹bool T_is_ptr›

struct CTraits {

 template‹class T›

 struct Args {

  typedef C_ptr_‹T› Base;

 };

};

// Traits для случая, когда T не является указателем.

template‹›

struct CTraits‹false› {

 template‹class T› struct Args {

  typedef C_‹T› Base;

 };

};

// Класс, предназначенный для использования клиентами.

template‹class T›

class C: public CTraits‹IsPointer‹T›::value›::template Args‹T›::Base {

 //…

};