gpt4 book ai didi

类模板中的 C++ std::enable_if,用于成员函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:22:05 24 4
gpt4 key购买 nike

问题很简单。我有一个包含防护的头文件和一个实现文件 .impl。头文件包括实现文件。我想执行以下操作:

头文件:

template<size_t N>
class A
{
void func();
};

.impl 文件:

template<size_t N>
typename std::enable_if<(N <= 5), void>::type A<N>::func() { ... }

template<size_t N>
typename std::enable_if<(N > 5), void>::type A<N>::func() { ... }

但是我还不太擅长 std::enable_if 并且它似乎无法找到 func 的原型(prototype),因为我通过更改返回来更改函数签名类型。如何在为用户提供一个接口(interface)功能的同时有不同的实现。

这本质上是对两个寄存器进行操作的 MCU 寄存器修饰符,因为一个寄存器没有容量。我宁愿不在函数内部使用任何基于 N 的脏偏移量,而是依赖于普通结构。此外,我宁愿不使用帮助函数,如果没有它们可能会使事情复杂化。

最佳答案

您可以使用 tag dispatching相反:

template <size_t N>
class A
{
void func()
{
do_func(std::integral_constant<bool, (N > 5)>{});
}

void do_func(std::true_type) { /* handles the N > 5 case */ }
void do_func(std::false_type) { /* handles the N <= 5 case */ }
};

关于类模板中的 C++ std::enable_if,用于成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22972573/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com