将指令作为容器的参数

时间:2014-09-12 10:30:44

标签: c++ c++11

考虑以下概念问题:

template<class T> class foo {
    std::map<text, T *> bar;

    void push_back(T &t) { bar[(text) t] = t; }
}

这具有令人惊讶的有用属性(如果与其他容器结合使用),但并非没有限制。

特别是,你不能这样做;

class tagged: public text;

foo<shared_ptr<tagged>> c;

由于foo与其内容不相关,shared_ptr不应该是一个演员。

我们可以bar[(text) *t] = t,但这只能解决问题。

所以相反,我一直试图想出一些更通用的东西,调用者定义如何投射。在伪:

template<class T, class Q = "text"> class foo {
    std::map<Q, T *> bar;

    void push_back(T &t) { bar[(Q) t] = t; }
}

自然以上不起作用。什么是优雅的解决方案?

0 个答案:

没有答案