例如,我想专门化一个类,使其具有一个成员变量,该成员变量是一个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。

07-28 08:23