混叠可变模板函数 [英] aliasing a variadic template function
本文介绍了混叠可变模板函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个可变函数,如:
void test(int){}
template< ; typename T,typename ... Args>
无效测试(int& sum,T v,Args ... args)
{
sum + = v;
test(sum,args ...);
}
我想把它命名为:
auto sum = test; //错误:无法从测试中推导出auto
int main()
{
int res = 0;
test(res,4,7);
std :: cout<< res;
}
我尝试使用 std :: bind
但是它不适用于可变参数,因为它需要占位符...
是否可以对可变参数赋值?
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)...);
}
I have a variadic function like :
void test(int){}
template<typename T,typename...Args>
void test(int& sum,T v,Args... args)
{
sum+=v;
test(sum,args...);
}
I want to alias it to something like :
auto sum = test;//error : can not deduce auto from test
int main()
{
int res=0;
test(res,4,7);
std::cout<<res;
}
I tried using std::bind
but it doesn't work with variadic functions because it needs placeholders ...
Is it possible to alias a variadic function ?
解决方案
In 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;
}
Alternatively wrap it in another variadic function and std::forward
the arguments :
template<typename T,typename...Args>
void other(int&sum, T v, Args&&... args)
{
test(sum, std::move(v), std::forward<Args>(args)...);
}
这篇关于混叠可变模板函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文