различные реализации класса на основе параметра шаблона

Я полагаю, это тривиально для людей, которые знают шаблоны...

Предположим, нам нужны две разные реализации этого класса шаблона, в зависимости от значения N:

template <int N>
class Foo {
    ...
};

Например:

template <int N>
class Foo {
    ... // implementation for N <= 10
};

template <int N>
class Foo {
    ... // implementation for N > 10
};

Как мы можем сделать это в С++ 11?


person user1387866    schedule 30.06.2014    source источник


Ответы (1)


Используйте дополнительный параметр шаблона со значением по умолчанию, чтобы различать случаи:

template <int N, bool b = N <= 10>
class Foo;

template <int N>
class Foo<N, true> {
  ...  // implementation for N <= 10
};

template <int N>
class Foo<N, false> {
  ...  // implementation for N > 10
};
person Jesse Beder    schedule 30.06.2014
comment
Использование std::conditional<N<=10, FooBaseLess<N>, FooBaseMore<N>>::type в качестве базового класса также будет работать. Но это намного аккуратнее, +1. - person Niall; 30.06.2014
comment
Спасибо за то, что: 1. Отвечаете лаконично и очень полезно, 2. Не спрашиваете, зачем вам это? - person user1387866; 30.06.2014