我想构造一个容器来保存基于模板的shared_ptrs。例如,我有:
template <class T>
class Data
{
....
};
template <class T>
struct DataPtr {
typedef boost::shared_ptr<Data<T> > type;
};
template <class T>
struct mapData {
typedef typename std::map<std::string, DataPtr<T>::type > type;
};
mapData<int>::type data;
void func(const std::string& str, DataPtr<int>::type& sth)
{
if (sth)
{
data[str] = sth;
}
}
现在我有几个问题。定义mapData时,编译器不允许我使用DataPtr::type,错误消息是“预期类型,得到了'dataPtr::type”。如果我放下类型并使用
template <class T>
struct mapData {
typedef typename std::map<std::string, DataPtr<T> > type;
};
然后,“data [str] = sth”不通过(“与“operator =”不匹配”)。
正确的方法应该是什么?
非常感谢。
最佳答案
您已将typename
关键字的位置放错了位置:
typedef std::map<std::string, typename DataPtr<T>::type > type;
// ^^^^^^^^