Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Обновлённая версия:
…
Клёво… не так ли? :)
Да кто же ограничивает и мешает вставить static_assert в else.
template <typename Concrete, typename... Ts>
std::unique_ptr<Concrete> constructArgs(Ts&&... params) {
static_assert(std::is_constructible_v<Concrete, Ts...>,
"constructArgs(...) failed: Type is not constructible from args");
return make_unique<Concrete>(forward<Ts>(params)...);
}
Вопрос от дремучего непрофессионала. А зачем вообще нужно "шаблонное метопрограммтрование", и как часто всплывают кейсы, где без него никак? Вот именно никак, т.е. не решить задачу по другому. И пример, если можно) для общего образования.
Пишите о том, что Вы знаете.
Как бы так это, хоть одним глазком в замочную скважину подглядеть, где этот новый инструмент блеснул своим «лаком» :)
И в этом случае тривиальный запрос по верификации типа, это одна инструкция сравнения метаданных, которая в любом случае должны быть сделана.
Зато язык стал сложнее. Вот в чем дело.
Зачем делать это сравнение если его можно сделать на этапе компиляции?
Вы серьёзно считаете что if constexpr делает код сложнее для чтения
Дело не в этом, дело в том что Вы не совсем понимаете о чем идет речь. Учите матчасть.
succes = patern_match val
with_cast(const std::vector<int>& items)
{
for (auto&& val : items)
std::cout << val << ' ';
}
with_type(int x)
{
cout << "some int " << std::to_string(x) << '\n';
}
with_cast(const std::string& str)
{
cout << "some str " << str << '\n';
}
at_default
{
cout << "oops";
};
Упрощение кода с помощью if constexpr в C++17