私はオブジェクトのデータベースを持っていて、コンパイル時に特定の型の数を数えたいと思いますが、これをコンパイルするのに少し問題があります。タイプ特性に基づいてconstexprカウントを行う方法
ここまでは私がこれまで試みてきたものの例を示していますが、これは "エラー:関数 '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