Xte*_*ter 6 c++ variadic-templates c++11 c++14
我想使用可变参数模板从结构中准备值对的列表.
#include <vector>
struct foo
{
foo(int a, int b)
: a(a), b(b) {}
int a;
int b;
};
struct Msg
{
std::vector<int> valueArray;
};
template<typename... Args>
Msg func(Args... args)
{
Msg msg;
msg.valueArray = { sizeof...(args), (args.a)..., (args.b)... };
return msg;
}
int main() {
Msg msg = func(foo{1,2}, foo{3,4}, foo{5,6});
}
Run Code Online (Sandbox Code Playgroud)
将返回func将返回的消息valueArray = [3, 1, 3, 5, 2, 4, 6].
有没有简单的方法来扩展可变参数的方式,valueArray会是什么样子valueArray = [3, 1, 2, 3, 4, 5, 6]?
以下内容并不像我想要的那样通用,但也许对您来说就足够了:
template<typename Arr, std::size_t... Is>
Msg func2( const Arr& arr, std::index_sequence<Is...> )
{
Msg msg;
msg.valueArray = {
sizeof...(Is) / 2,
( ( Is % 2 == 0 ) ? std::get< Is / 2 >( arr ).a
: std::get< Is / 2 >( arr ).b )... };
return msg;
}
template<typename... Args>
Msg func(Args... args)
{
return func2( std::forward_as_tuple( args... ),
std::make_index_sequence< 2*sizeof...(Args) >() );
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
128 次 |
| 最近记录: |