У меня есть база данных объектов и хотелось бы подсчитать, сколько из них имеет определенный тип во время компиляции, но у меня возникают проблемы с его компиляцией.Как выполнить подсчет constexpr на основе черта типа
Вот приведенный ниже пример того, что я пытался до сих пор, но это не удается скомпилировать с помощью «error: call to function do_count», который не является ни видимым в определении шаблона, ни найденным зависящим от аргумента поиска »,
Есть ли лучший способ?
#include <cstdint>
#include <type_traits>
#include <cstddef>
struct unused_tag {};
struct used_tag {};
template<std::size_t X>
struct traits {
using type = unused_tag;
};
template<>
struct traits<7> {
using type = used_tag;
};
static constexpr const std::size_t MAX_X = 10;
template<std::size_t X = 0>
constexpr
std::enable_if_t<
!std::is_same<typename traits<X>::type, unused_tag>::value,
std::size_t>
do_count()
{
return do_count<X + 1>() + 1;
}
template<std::size_t X = 0>
constexpr
std::enable_if_t<
std::is_same<typename traits<X>::type, unused_tag>::value,
std::size_t>
do_count()
{
return do_count<X + 1>();
}
template<>
constexpr std::size_t do_count<MAX_X>()
{
return 0;
}
static constexpr const std::size_t COUNT = do_count();
Что это «база данных» выглядит? Можете ли вы дать более подробное объяснение примерам желаемого ввода и вывода? В какой строке это ошибка? – qxz