【问题标题】:How to create a template with variable number of type parameters?如何创建具有可变数量类型参数的模板?
【发布时间】:2020-01-05 08:31:12
【问题描述】:

在我们的代码库中,我们经常使用std::variant<std::shared_ptr<SomeClass>, ...>

这显然需要大量的写作。如何制作模板?

template <class... T>
using VarSP = std::variant<std::shared_ptr<???>>;

T 在上面的 sn-p 中应该去哪里? 期望的行为应该是:

VarSP<Foo, Bar, Baz> // std::variant<std::shared_ptr<Foo>, std::shared_ptr<Bar>, std::shared_ptr<Baz>>

【问题讨论】:

  • 我很好奇你尝试了什么。如果您以前看过任何可变参数模板,这里真的没有那么多选择......
  • @MaxLanghof 老实说,除了您在问题中看到的 sn-p 之外,我没有任何想法。另外,我只学了一周左右的C++,所以我什至不知道它被称为可变参数模板(因此无法正确谷歌)。
  • 如果您只是在 C++ 编程的第一周或第二周并且已经在使用模板包,那么您似乎有点超前了。放慢脚步,甚至可能后退一两步,get a couple of good books,然后以较慢的速度继续前进,同时先学习基础知识。
  • @Someprogrammerdude 感谢您的建议!在我的情况下,我只需要制作一个小型 node.js C++ 插件,快速而肮脏。我也是 TypeScript 的高级用户,这就是为什么模板的概念对我来说并不难(它们很像 TS 的泛型)。也就是说,我喜欢阅读一些现代 C++ 书籍,但我是一场名为“发展中国家的生活”的激烈竞赛的参赛者,所以我还买不起。跨度>
  • “我们经常使用std::variant&lt;std::shared_ptr&lt;SomeClass&gt;, ...&gt;。”,差不多,只是去掉多余的逗号;-)

标签: c++ variadic-templates pack-expansion


【解决方案1】:
template <typename... T>
using VarSP = std::variant<std::shared_ptr<T>...>;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-25
    相关资源
    最近更新 更多