我有一个名为_push
的函数,可以处理不同的参数,包括元组,并且应该返回推送元素的数量。
例如,_push(5)
应该将'5'推入堆栈(lua的堆栈),并返回1(因为已推送一个值),而_push(std::make_tuple(5, "hello"))
应该推送'5'和'hello'并返回2。
我不能简单地将其替换为_push(5, "hello")
,因为我有时会使用_push(foo())
,而我希望允许foo()
返回一个元组。
无论如何,我无法使它与元组一起工作:
template<typename... Args, int N = sizeof...(Args)>
int _push(const std::tuple<Args...>& t, typename std::enable_if<(N >= 1)>::type* = nullptr) {
return _push<Args...,N-1>(t) + _push(std::get<N-1>(t));
}
template<typename... Args, int N = sizeof...(Args)>
int _push(const std::tuple<Args...>& t, typename std::enable_if<(N == 0)>::type* = nullptr) {
return 0;
}
假设您要推送一个
tuple<int,bool>
。我希望它能够按以下方式工作:
- 调用
_push<{int,bool}, 2>
(第一个定义) - 调用
_push<{int,bool}, 1>
(第一个定义) - 调用
_push<{int,bool}, 0>
(第二个定义)
_push<Args...,N-1>(t)
(第3行)的错误,称无法找到要调用的匹配函数(没有进一步的细节)。 我尝试过去掉“...”,但是我得到了另一个错误,说参数包未展开。如何解决这个问题?
PS:我知道您可以使用模板结构来完成此操作(实际上这就是我之前所做的),但我想知道如何使用函数来完成它
PS2:PS2已解决,谢谢GMan
sizeof...(Args)
,它返回包中参数的数量。 - GManNickGpush(...)
,并使___发生。” - GManNickG