【发布时间】:2018-08-09 18:49:04
【问题描述】:
我有这个代码,它确实有效:
auto thev = std::static_pointer_cast<Thevenin>(
add(new Thevenin(N("cntl"), N("gnd"), 1.0)));
auto det1 = std::static_pointer_cast<Detector>(
add(new Detector(N("vout"), N("gnd"), N("eout"), N("oout"), 0)));
auto det2 = std::static_pointer_cast<Detector>(
add(new Detector(N("cntl"), N("gnd"), N("ein"), N("oin"), 0)));
但是,我不喜欢必须指定类型两次。似乎可变参数模板可以让我编写如下内容:
auto thev = tfun(Thevenin, N("cntl"), N("gnd"), 1.0);
auto det1 = tfun(Detector, N("vout"), N("gnd"), N("eout"), N("oout"), 0)));
auto det2 = tfun(Detector, N("cntl"), N("gnd"), N("ein"), N("oin"), 0)));
不幸的是,关于包扩展的文档对我来说太简洁了,我一直无法编写一个可以编译的 tfun 模板。谁能告诉我它是怎么做的?
【问题讨论】:
-
将
add制作成类似于std::make_unique的模板 -
你想达到什么目的?也许您想使用满足您需求的
make_shared?在您的情况下,add是什么?您可以查看make_{shared|unique}是如何实现的,以了解如何做您想做的事情。 -
你应该改变
add;你需要一个静态 ptr 演员的事实是你的大部分问题。