英文:
How could extract parameter pack from variadic template type (e.g. std::tuple) in C++ 11
问题
使用C++11,如何将模板类型的可变参数提取为参数包?
假设我们有模板特化类型Argument_t
...
template<typename F>
using Argument_t = typename ArgumentType<F>::type; // Args...的std::tuple
现在我想在另一个结构体中使用这个模板特化,以将模板参数的签名复制到一个方法中。例如:
template<typename F>
struct SomeStruct {
// 我应该如何在这里使用Args...,Args...应该是Argument_t<F>的一部分。
void some_method(Args... args)
{
...
// 应该能够访问some_member_data
};
...
static int some_member_data;
}
像这样,如何使用Args...
,其中Args...
是std::tuple<Args...>
?或者是否有更好的方法,而不是提供std::tuple<Args...>
而是提供Argument_t
?
英文:
With C++ 11 How can I extract a variadic argument of a template type as a parameter pack?
Say we have template specialization type Argument_t
...
template<typename F>
using Argument_t = ArgumentType<F>::type; // std::tuple of Args...
Now I would like to use this template specialization in another struct to copy the signature of the template argument to a method. e.g.
template<typename F>
struct SomeStruct {
// How can I do this where Args... is that of Argument_t<F>.
void some_method(Args... args)
{
...
// Should have access to some_member_data
};
...
static int some_member_data;
}
Like this how could one use Args...
where having std::tuple<Args...>
. Or is there any better way instead of Argument_t
providing std::tuple<Args...>
.
答案1
得分: 1
我认为在你的情况下,更简单的方法是通过专门化:
template <typename Tuple> struct SomeStruct;
template <typename... Args>
struct SomeStruct<std::tuple<Args...>>
{
void some_method(Args... args)
{
// ...
}
// ...
};
英文:
I think simpler way is with specialization in your case:
template <typename Tuple> struct SomeStruct;
template <typename... Args>
struct SomeStruct<std::tuple<Args...>>
{
void some_method(Args... args)
{
// ...
}
// ...
};
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论