C++ 将指令强制转换为容器的参数

C++ 将指令强制转换为容器的参数,c++,c++11,C++,C++11,考虑以下概念问题: template<class T> class foo { std::map<text, T *> bar; void push_back(T &t) { bar[(text) t] = t; } } 当然,上述方法是行不通的。什么是优雅的解决方案?您可以添加一个函子,在accessIMO上为您进行转换。这看起来不是您应该做的事情,即使您可以。你到底想达到什么目的?如果你需要手动施法,这已经不是那么好了。重新解释或C风格的演

考虑以下概念问题:

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

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

当然,上述方法是行不通的。什么是优雅的解决方案?

您可以添加一个函子,在accessIMO上为您进行转换。这看起来不是您应该做的事情,即使您可以。你到底想达到什么目的?如果你需要手动施法,这已经不是那么好了。重新解释或C风格的演员阵容更不受欢迎。你的目标是什么?只是把不同类型(但有一个基类型)的共享_ptr放在一个容器中?我基本上有一个向量,其中每个元素都有一个名称和一个索引,并且可以作为[x]快速访问它们,其中x是其中之一。将其视为具有恒定访问时间的可排序映射。您可能会发现这一点很有用。如果您想要O(1)访问时间,可以考虑使用c++11中的std::unorered_映射。它有O(1)个平均竞争性,如果地图上有一个碰撞点,它的竞争性可能会上升到O(N)。
class tagged: public text;

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

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