【发布时间】:2016-12-22 03:40:34
【问题描述】:
我有一个对象数据库,想在编译时计算有多少是特定类型的,但编译时遇到了一些麻烦。
这是迄今为止我一直在尝试的一个精简示例,但这无法编译并出现“错误:调用函数'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();
【问题讨论】:
-
这个“数据库”是什么样的?您能否通过一些所需输入和输出的示例提供更好的解释?该错误在哪一行?