【发布时间】: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<std::shared_ptr<SomeClass>, ...>。”,差不多,只是去掉多余的逗号;-)
标签: c++ variadic-templates pack-expansion