1

我这辈子都做不到。

我有一个现有的模板:

template <class T>
class MyTemplate;

现在我想专门化它,但是对于作为模板的类 T - 无需进一步专门化第二个模板,例如:

template <>
template <class T>
class MyTemplate<vector> { /*...*/ };

但是这个,以及我尝试过的各种其他语法似乎都没有编译。这个的语法是什么?或者甚至有可能吗?如果没有,是否有可能的替代方案,MyTemplate以便我可以处理和 的广义vector专业化map

4

5 回答 5

2

正确的语法是:

template < typename T>
class MyTemplate<vector<T> > { /*...*/ };
于 2012-06-19T07:35:48.577 回答
2

我想你正在寻找这个:

template<typename T>
class MyTemplate {...}

template<typename T>
class MyTemplate<vector<T> > {...}

上面,当你做 aMyTemplate<vector<int> > x;Tis时使用了部分特化int

于 2012-06-19T07:37:56.890 回答
1

更普遍

template<typename A, typename B> class MyTemplate;
template<typename C, typename D> class SomeTemplate;

template<typename A, typename C>
class MyTemplate<A, SomeTemplate<C,A> > { /* ... */ };
于 2012-06-19T07:39:52.120 回答
0

模板可以按照以下方式定义:

  • 非类型参数(常量)
  • 类型参数
  • 模板参数

一旦如此定义,任何特化都必须尊重参数的类型。

因此,如果您想专门针对vector需要类型参数的(这是一个模板),您需要拼出的参数vector来创建一个(模板化的)类型参数:

template <typename T, typename Alloc>
class MyTemplate < std::vector<T, Alloc> > {
};

同样 for map,虽然有更多参数:

template <typename K, typename V, typename C, typename A>
class MyTemplate < std::map<K, V, C, A> > {
};

给你:)

于 2012-06-19T08:06:26.383 回答
0

我不确定为类定义模板的语法。你需要查一下。然而,定义模板并不是包罗万象的。您需要为每个模板编写类定义。例如,如果您有一个类定义来谈论 1 个 x 类型的参数,并采用 2 个 y 类型的参数,等等......那么您需要一个类来处理它。与函数重载相同。您具有相同的函数名称,但每个函数都采用不同的参数。您为每个编写一个函数。该调用根据参数列表选择正确的函数。

所以一个类......将通过为每种类型定义来对不同的对象进行排序。

于 2012-07-09T09:37:24.517 回答