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


Автор: xbarmaglot 13.4.2017, 14:03
Есть шаблонный контейнер, для которого можно задавать параметрами размер

Схематично
Код

template <std::size_t N> class Some {
public:
    static constexpr std::size_t SIZE = N;
    static const Some UNKNOWN;

    using container = std::array<uchar, N>;
    using value_type = typename container::value_type;

    Some(value_type value)
    {
        m_array.assign(value);
    }
    Some(const std::initializer_list<value_type>& list)
    {
        ...
    }
    ~Some() {}

private:
    container m_array;
};


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

template <uint N> const typename Some<N> Some<N>::UNKNOWN(0x00);
using Container = Some<100>;


Так вот хотел скрыть специализацию, что то вроде
Код

template <std::size_t N> class Some {
public:
    static constexpr std::size_t SIZE = N;
    using container = std::array<uchar, N>;
    using value_type = typename container::value_type;

private:
    static const Some<N> UNKNOWN (0x00);
    container m_array;
};


почему так нельзя, а внешняя специализация канает? 

Автор: xvr 14.4.2017, 13:20
Сделайте так:
Код

template <std::size_t N> class Some {
public:
    static constexpr std::size_t SIZE = N;
    using container = std::array<uchar, N>;
    using value_type = typename container::value_type;
private:

    static const Some<N>& get_unknown()
    { 
      static const Some<N> UNKNOWN (0x00);
      return UNKNOWN ;
    }

    container m_array;
};

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