数据类型"struct seq<0, 1, 2>{}"含义是什么?
What "struct seq<0, 1, 2>{}" data type meaning?
template<int... Is>
struct seq { };
template<int N, int... Is>
struct gen_seq : gen_seq<N - 1, N - 1, Is...> { };
template<int... Is>
struct gen_seq<0, Is...> : seq<Is...> { };
调用gen_seq<3>得到最终结构体seq<0, 1, 2>{}类型时,我无法理解"struct seq<0, 1, 2>{}"数据类型的含义? 这意味着一个结构包含三个数字?
它是可变参数模板的使用,它可以接受任意数量的参数。可以在这些结构的构造函数中使用__PRETTY_FUNCTION__
检查调用堆栈。
#include <iostream>
template<int... Is>
struct seq {
seq(){std::cout<<__PRETTY_FUNCTION__<<std::endl;}
};
template<int N, int... Is>
struct gen_seq : gen_seq<N - 1, N - 1, Is...> {
gen_seq(){std::cout<<__PRETTY_FUNCTION__<<std::endl;}
};
template<int... Is>
struct gen_seq<0, Is...> : seq<Is...> {
gen_seq(){std::cout<<__PRETTY_FUNCTION__<<std::endl;}
};
int main() {
gen_seq<3> t;
}
输出:
seq<0, 1, 2>::seq() [Is = <0, 1, 2>]
gen_seq<0, 0, 1, 2>::gen_seq() [N = 0, Is = <0, 1, 2>]
gen_seq<1, 1, 2>::gen_seq() [N = 1, Is = <1, 2>]
gen_seq<2, 2>::gen_seq() [N = 2, Is = <2>]
gen_seq<3>::gen_seq() [N = 3, Is = <>]
它是包含三个数字类型的对象。对象没有数据成员。
它用于将模板参数包(int
s(作为单个值携带,例如
template <typename UnaryOperation, typename... Ts, int... Is>
std::tuple<Ts...> tuple_for_impl(UnaryOperation op, std::tuple<Ts...> input, seq<Is...> /*unused*/) {
return { op(std::get<Is>(input))... };
}
template <typename UnaryOperation, typename... Ts>
std::tuple<Ts...> tuple_for(UnaryOperation op, std::tuple<Ts...> input) {
return tuple_for_impl(op, input, gen_seq<sizeof...(Ts)>{});
}
在 C++14 中,它包含在标准库中,如std::integer_sequence
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- C++避免重复声明的语法是什么
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- C++从另一个类访问公共静态向量的正确方法是什么
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- C++中名称篡改的目的是什么
- 在 c++ 中拥有一组结构的正确方法是什么?
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 是什么阻止DOMTimerCoordinator::NextID进入无休止的循环
- 派生类销毁的最佳实践是什么
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 通过JNI传递数据数组的最快方法是什么
- "using namespace std;"在C++的作用是什么?
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 文件系统:复制功能的速度秘诀是什么
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 使用QQuickFramebufferObject时同步数据的最佳方式是什么
- 是什么原因导致它无法编译?它是声明签名还是在函数本身的实现中
- 使用 std::vector<boost::shared_ptr<Base_Class>> 或 boost::p tr_vector 的性能注意事项是什么<Base>