c++ - 您可以根据大小及其内容生成可变模板包吗?

标签 c++ templates c++11 variadic-templates

考虑以下代码:

template<unsigned int... TSIZE>
struct Base {};
template<unsigned int TORDER, unsigned int TDIM>
struct Derived : public Base</* TDIM, TDIM, ... TDIM (TORDER times) */> {};

您认为在这个例子的第二行正确生成 Base 的模板参数是否存在技巧?例如我想要 Derived<3, 5>Base<5, 5, 5> 继承.怎么做?

最佳答案

有了一点 TMP,这毕竟不是那么难:

template<unsigned ToGo, class T, T Arg, template<T...> class Target, T... Args>
struct generate_pack
  : generate_pack<ToGo-1, T, Arg, Target, Args..., Arg>
{ // build up the 'Args' pack by appending 'Arg' ...
};

template<class T, T Arg, template<T...> class Target, T... Args>
struct generate_pack<0, T, Arg, Target, Args...>
{ // until there are no more appends to do
  using type = Target<Args...>;
};

template<unsigned Num, class T, T Arg, template<T...> class Target>
using GeneratePack = typename generate_pack<Num, T, Arg, Target>::type;

template<unsigned int... TSIZE>
struct Base{};

template<unsigned int TORDER, unsigned int TDIM> 
struct Derived
  : GeneratePack<TORDER, unsigned, TDIM, Base>
{
};

Live example.

关于c++ - 您可以根据大小及其内容生成可变模板包吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11966044/

相关文章:

eclipse - 如何制作一个新的Eclipse项目模板?

C++: "illogical"析构函数行为

c++ - 使用 g++ 编译 OpenMP 时未知编译指示

c++ - 归并排序的实现

c++ - 如何转换模板类?

c++ - 模板类函数语法的模板类参数

c++ - 如何从被传递的对象中通过引用传递 self?

c++ - vector 之间的交集

c++ - C++ 中的 WINMAIN 和 main()(扩展)

c++ - 如何正确调用命令缓冲区的 vulkan.hpp 构造函数?