例如,我想专门化一个类,使其具有一个成员变量,该成员变量是一个STL容器,例如一个 vector 或一个列表,所以我需要类似的东西:
template <class CollectionType, class ItemType>
class Test
{
public:
CollectionType<ItemType> m_collection;
};
所以我可以做:
Test t = Test<vector, int>();
t.m_collection<vector<int>> = vector<int>();
但这会产生
test.cpp:12: error: `CollectionType' is not a template
最佳答案
为什么不这样做呢?
template <class CollectionType>
class Test
{
public:
CollectionType m_collection;
};
Test t = Test<vector<int> >();
t.m_collection = vector<int>();
如果需要项目类型,可以使用
CollectionType::value_type
。编辑:响应您有关创建返回value_type的成员函数的问题,您可以这样进行:
typename CollectionType::value_type foo();
您添加类型名称是因为CollectionType尚未绑定(bind)到实际类型。因此,没有可以查询的value_type。