gpt4 book ai didi

函数参数的 C++ 模板包

转载 作者:行者123 更新时间:2023-11-30 03:37:49 24 4
gpt4 key购买 nike

是否可以创建一个模板函数来接收函数指针的可变参数包?

template<ReturnType (*FN)(), ReturnType (*FNX...)()>
void run() {
...
run<FNX...>();
...
}

我已经尝试将 ... 放在我能想到的所有地方,但我无法编译它。不支持吗?

最佳答案

你可以使用这个语法,但它看起来很奇怪:

template<void(*... Functions)()>
void call_all()
{
initializer_list<int>{(Functions(), 0)...};
}

不过,我会为类型起别名:

template <typename T>
using function_ptr = add_pointer_t<enable_if_t<is_function<T>::value,T>>;

template<function_ptr<void()>... Functions>
void call_all()
{
initializer_list<int>{(Functions(), 0)...};
}

您还可以使用辅助类进行更高级的处理:

using fp = function_ptr<string()>;

template<fp First, fp... Others>
struct helper
{
static void run()
{
helper<First>::run();
helper<Others...>::run();
}
};

template<fp One>
struct helper<One>
{
static void run()
{
DBG(One());
}
};

template<fp... Functions>
void run()
{
helper<Functions...>::run();
}

live demo

关于函数参数的 C++ 模板包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39997808/

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