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

Предполагам, че това е тривиално за хора, които познават шаблони...

Да предположим, че искаме две различни реализации на този шаблонен клас, в зависимост от стойността на N:

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

Например:

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

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

Как можем да направим това в C++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