将可变模板链接在一起
Chaining variadic templates together
如果以下代码中的X
被转换为使用C++11可变模板,并且应该支持任意数量的模板参数,它会是什么样子?
template<int OFFSET>
struct A { enum O { offset = OFFSET }; enum S { size = 2 }; };
template<int OFFSET>
struct B { enum O { offset = OFFSET }; enum S { size = 4 }; };
template<int OFFSET>
struct C { enum O { offset = OFFSET }; enum S { size = 10 }; };
template < template <int> class B0,
template <int> class B1,
template <int> class B2 >
struct X : public B0<1>,
B1<B0<1>::size * B0<1>::offset >,
B2< B1<B0<1>::size * B0<1>::offset >::size *
B1<B0<1>::size * B0<1>::offset >::offset >
{ };
int main(int argc, const char *argv[])
{
X<A, B, C> x;
return 0;
}
可能:
template <int Var, template <int> Head, typename... Tail>
struct X_helper : Head<Var>,
, X_helper<Head<Var>::size * Head<Var>::offset, Tail...>
{};
template <int Var, template <int> Arg>
struct X_helper : Head<Var>
{};
template <typename... Args>
struct X : X_helper<1, Args...>
{};
我希望我的语义是正确的。
你仍然对这个问题感兴趣吗?
我正在使用C++11,所以我试着回答。
我不确定你想要什么(嗯……你在2012年想要什么),但我认为下面的例子应该符合你的要求。
template<int OFFSET>
struct A { enum O { offset = OFFSET }; enum S { size = 2 }; };
template<int OFFSET>
struct B { enum O { offset = OFFSET }; enum S { size = 4 }; };
template<int OFFSET>
struct C { enum O { offset = OFFSET }; enum S { size = 10 }; };
template <int N, template <int> class ...>
struct H;
template <int N>
struct H<N>
{ };
template <int N,
template <int> class C1,
template <int> class ... Cs>
struct H<N, C1, Cs...> : public C1<N>,
public H<C1<N>::size * C1<N>::offset, Cs...>
{ };
template <template <int> class ... C>
struct X : public H<1, C...>
{ };
int main()
{
X<A, B, C> x;
return 0;
}
p.s.:很抱歉我的英语不好
相关文章:
- 可能的 GCC 链接器错误会导致将弱符号和局部符号链接在一起时出错
- 在C 中,我如何在下面的示例中成功将类别链接在一起
- 如何构建库并将其与Make链接在一起
- 在C++中,我们如何将插入运算符和其他运算符链接在一起
- 将MBCS和Unicode库链接在一起
- Visual Studio,将项目链接在一起并进行测试
- Visual Studio 2010 默认属性表似乎在调试和发布配置下都链接在一起,这是怎么回事?
- 有没有办法在Visual Studio中将来自不同解决方案的类链接在一起
- 将问题与多个文件链接在一起
- 不同的海湾合作委员会方言可以链接在一起吗?
- 将几个LLVM C++模块链接在一起会在lli中产生segfault
- 分别创建目标文件,然后在Makefile中将它们链接在一起的目的是什么?< / h1 >
- Netbeans/C++:将2个项目链接在一起(可执行文件/动态库)
- 将可变模板链接在一起
- 当我将两个头文件链接在一起时,其中一个无法识别另一个
- 将调用与共享指针链接在一起
- 有没有办法从 ELF 中提取符号,并使用 LD 将另一个文件与上一个 ELF 中定义的符号链接在一起
- 我可以在 IF 语句中将比较链接在一起吗?
- 创建一个简单的"hello world"并将其与 2 个预编译对象链接在一起
- 具有模板的对象文件如何链接在一起