【发布时间】:2013-03-22 15:48:04
【问题描述】:
我编写了一个异步作业队列类,该类已经运行良好多年了。它使用std::vector 作为底层集合来保存作业,然后按照您的预期稍后处理它们。当我添加作业时,它会在此 vector 上执行 push_back。
最近我决定要模板化它使用的底层集合类型以及我编写它的方式,这应该非常简单。现在这样声明:
template<typename J, typename CollectionT = std::vector<J>>
class async_jobqueue
{
public:
只有一个障碍,对于矢量类型的容器,我想将内容推到集合的末尾并调用push_back,对于设置类型的容器,我想调用insert。我怎样才能做出关于调用哪个编译的决定?或者有没有我可以使用的方便的适配器?
【问题讨论】:
-
看看这个:stackoverflow.com/questions/257288/…。当我读到它时,它让我大吃一惊。
-
@SirPentor 这很酷,尽管它看起来可以让我在运行时弄清楚它。
-
要么使用
SFIANE(en.wikipedia.org/wiki/SFINAE),要么使用specialize或template。 -
@Benj 你可以结合
std::enable_if或static_asset在编译时使用。 -
@Benj 你如何决定什么是矢量或固定类型的容器?您是指序列容器还是关联容器?