【发布时间】:2021-10-27 12:30:00
【问题描述】:
只是为了好玩,我正在尝试使用模板实现编译时 pow2 函数。 实际上,我可以这样做:
template <std::size_t n, typename type_t>
struct custom
{
static type_t pow(type_t b) { return b * custom<n - 1, type_t>::pow(b); }
};
template <typename type_t>
struct custom<0, type_t>
{
// (void)b; to avoid unused warning.
static type_t pow(type_t b) { (void) b; return static_cast<type_t>(1); }
};
这样,它可以工作,但我的方法是更多地考虑这样的事情:
template <std::size_t n, typename type_t>
type_t cus_pow(type_t b) { return b * cus_pow<n - 1, type_t>(b); }
// This doesn't exists.
template <0, typename type_t>
type_t cus_pow(type_t b) { (void) b; return 1; }
因为如果我想创建任何部分元编程函数,不得不创建一个结构,它看起来太多了。
那么,有什么方法可以只用一个函数进行部分元编程?
【问题讨论】:
-
你不能用函数模板做部分特化。
-
如果你想要一个编译时间
pow计算,你可以使用带有for循环的constexpr函数。
标签: c++ templates metaprogramming template-meta-programming