Как написать код для создания экземпляра условного шаблона в C ++ - PullRequest
0 голосов
/ 31 августа 2018

Я пишу шаблон класса, который параметризован на size_t,

template<size_t k>
class MyClass {...}

Параметр k действительно должен быть меньше 10, в этом случае, и я бы хотел, чтобы он не компилировался, если он выходит за рамки этого. Как я могу сделать это в C ++ 11 и выше?

MyClass<1> instance1; // ok
MyClass<2> instance2; // ok
MyClass<100> instance100; // fail to compile

Ответы [ 3 ]

0 голосов
/ 31 августа 2018

Вы можете добавить проверку в параметре шаблона как

template<size_t k, std::enable_if_t<k <= 10, bool> = true>
class MyClass {};

Это позволит MyClass<1> instance1;, но MyClass<100> instance100; не удастся скомпилировать.

0 голосов
/ 31 августа 2018

Вы можете использовать std::enable_if, если вы используете C ++ 11.

template<std::size_t k, typename unused = typename std::enable_if<k <= 10>::type>
class MyClass {};

Вы можете использовать std::enable_if_t, если вы можете использовать C ++ 14 или выше.

template<std::size_t k, typename unused = std::enable_if_t<k <= 10 >>
class MyClass {};
0 голосов
/ 31 августа 2018

Использование static_assert

template<size_t k>
class MyClass {
    static_assert(k < 10, "Illegal k");
};

int main() {
  MyClass<50> t; //< Compile time failure
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...