通过可变参数模板调用函数指针作为模板参数
Call function pointers via variadic template as template argument
我想通过模板(而不是通过函数)将函数(在编译时之前已知)传递给类。在类中,我想彼此调用这些函数。函数始终具有相同的类型(在本例中返回 void 并且不传递任何参数)。稍后我想传递这样的函数:void foo(uint16_t arg);我已经尝试了两件事,但找不到解决方案。
typedef void(*decodeFunct)(void);
template <uint8_t pin, decodeFunct... functions>
class CIRLremote{
public:
CIRLremote(void){
// empty
}
void begin(void){
// call all decode functions
//functions... ();
call(functions...);
}
void call(decodeFunct f){
f();
}
};
您可以轻松编写一个函数,通过始终调用其第一个参数并使用其余参数递归调用自身来调用其所有参数。空参数列表的重载为递归提供了锚点:
#include <utility>
inline void call() { }
template<typename T, typename... V>
inline void call(T&& t, V&&... v) { t(); call(std::forward<V>(v)...); }
如果您完全按照您的示例来调用它,它将起作用。
请注意,参数类型不是固定的,因此您可以使用任何函子(而不仅仅是函数指针)调用它。
修改它以适应任何类似的用例(例如,分发一个参数,每个函子传递一个参数,聚合结果等)非常简单。
相关文章:
- 使用指向成员的指针将成员函数作为参数传递
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- 修改函数中的指针(将另一个指针作为参数传递)
- Clang bug?使用指针作为模板参数
- MSVC将仅移动结构参数解释为指针
- 非类型指针和引用模板参数,以及在编译时如何/为什么解析它们.c++
- 如何使用非类型模板参数传入指向数组的指针
- 将成员函数指针作为参数传递给模板方法
- 匹配函数指针作为模板参数?
- 当指向对象的指针作为参数传递给 std::thread 时,内存可见性
- 通过智能指针和转换对基本模板参数进行模板推导
- 为函数定义符号不明确的指针参数
- 使用引用与指针将数组作为参数传递
- 如何将成员函数作为回调参数传递给需要"typedef-ed"自由函数指针的函数?
- C++ - 声明指向返回任何类型并获取任意数量参数的函数的指针
- 将函数参数完美转发到函数指针:按值传递呢?
- 保留函数指针模板参数
- 如何构造一个以可变参数指针函数作为成员的类?
- 指向对象的非类型模板参数指针
- c++ 使用 *& as 参数(指针乐趣,三级树方法)