You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

可变参数类的多重继承实现咨询:能否编写如下C++模板代码?

问题解答

你提供的这段C++模板代码是完全合法的,并且正好实现了你期望的行为。

代码解析

  • template<class... Ds> 是可变参数模板(C++11引入),其中Ds是一个模板参数包,它可以接受任意数量(包括0个)的类型参数。
  • public A<Ds>... 是包展开语法,编译器会自动把参数包Ds中的每个类型逐一展开,最终生成多个基类的继承声明。比如当你实例化B<D1, D2>时,编译器会将其展开为:
    class B : public A<D1>, public A<D2> {};
    

和你手动编写的代码完全等价。

实例化示例

比如你可以这样使用这个模板:

// 等价于继承A<int>和A<std::string>
B<int, std::string> b;

额外注意

如果需要限制B必须至少传入一个模板参数,可以通过静态断言或C++20的约束来实现:

template<class... Ds>
class B : public A<Ds>... {
    static_assert(sizeof...(Ds) > 0, "B requires at least one template parameter");
};

内容的提问来源于stack exchange,提问作者SpeakX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 12:45:55