gpt4 book ai didi

c++ - 函数作为模板参数

转载 作者:太空狗 更新时间:2023-10-29 20:02:28 25 4
gpt4 key购买 nike

我有一个 TaskWrapper:

template <typename T, T (*F)(T)>
struct TaskWrapper {
static inline T run(T clock) {
return F(clock);
}
};

要使用它,我必须指定 T 模板参数:

uint16_t task1(uint16_t clock) { return clock + 1; }
typedef tasks::TaskWrapper<uint16_t, task1> Task;

我想简单地写一下:

typedef tasks::TaskWrapper<task1> Task;

并让编译器确定返回和参数类型是 uint16_t。

注意事项:

TaskWrapper 显然被简化了,实际上还有一些其他参数,这些参数在 typedef 期间传递。

包装函数只能是:

uint8_t task(uint8_t clock);
uint16_t task(uint16_t clock); // or
uint32_t task(uint32_t clock);

TaskWrapper 作为模板参数传递给另一个类,该类将在某个时候调用 Task::run(...);

C++11 就可以了。

最佳答案

仅自 C++17 的 template <auto> 起特点:

template <auto F>
struct TaskWrapper {
template <typename T>
static inline auto run(T clock) {
return F(clock);
}
};

uint16_t task1(uint16_t clock) { return clock + 1; }
typedef TaskWrapper<&task1> Task; // ok

关于c++ - 函数作为模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40387760/

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