gpt4 book ai didi

c++ - 可变长度模板参数列表?

转载 作者:可可西里 更新时间:2023-11-01 15:30:00 26 4
gpt4 key购买 nike

我记得我曾经做过这样的事情:

template <ListOfTypenames>
class X : public ListOfTypenames {};

也就是说,X 继承自作为模板参数传递的类型名称的可变长度列表。当然,此代码是假设的。

不过,我找不到这方面的任何引用资料。可能吗?是 C++0x 吗?

最佳答案

您可以在当前的 C++ 中完成。您为模板提供了“足够多”的参数,并为它们提供了默认值:

class nothing1 {};
class nothing2 {};
class nothing3 {};

template <class T1 = nothing1, class T2 = nothing2, class T3 = nothing3>
class X : public T1, public T2, public T3 {};

或者您可以变得更复杂并使用递归。首先你转发声明模板:

class nothing {};

template <class T1 = nothing, class T2 = nothing, class T3 = nothing>
class X;

然后专门针对所有参数都是默认的情况:

template <>
class X<nothing, nothing, nothing> {};

然后您正确定义通用模板(之前您只转发声明):

template <class T1, class T2, class T3>
class X : public T1, public X<T2, T3>

注意在基类中,您如何继承 X 但缺少第一个参数。所以他们都沿着一个地方滑动。最终它们都将是默认值,并且特化将开始,它不继承任何东西,从而终止递归。

更新: 只是有一种奇怪的感觉,我以前发布过类似的东西,and guess what...

关于c++ - 可变长度模板参数列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1511532/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com