gpt4 book ai didi

c++ - 别名可变参数模板函数

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:34:33 24 4
gpt4 key购买 nike

我有一个可变参数函数,例如:

void test(int){}

template<typename T,typename...Args>
void test(int& sum,T v,Args... args)
{
sum+=v;
test(sum,args...);
}

我想给它起别名:

auto sum = test;//error : can not deduce auto from test
int main()
{
int res=0;
test(res,4,7);
std::cout<<res;
}

我尝试使用 std::bind 但它不适用于可变参数函数,因为它需要占位符 ...

是否可以为可变函数设置别名?

最佳答案

在 C++1y 中:

#include <iostream>

void test(int){}

template<typename T,typename...Args>
void test(int& sum,T v,Args... args)
{
sum+=v;
test(sum,args...);
}

template<typename T,typename...Args>
decltype(test<T, Args...>)* sum = &(test<T, Args...>);

int main(void)
{
int res = 0;
sum<int, int>(res, 4, 7);
std::cout << res << std::endl;
}

或者将其包装在另一个可变参数函数和 std::forward 参数中:

template<typename T,typename...Args>
void other(int&sum, T v, Args&&... args)
{
test(sum, std::move(v), std::forward<Args>(args)...);
}

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

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