我不能为我的生活让这个工作。
我有一个现有的模板:
template <class T>
class MyTemplate;
现在我想专门研究它,但对于一个T类是一个模板 - 没有进一步专门化第二个模板,例如:
template <>
template <class T>
class MyTemplate<vector> { /*...*/ };
但是这个以及我尝试过的各种其他语法似乎都没有编译。这是什么语法?或者甚至可能吗?如果没有,MyTemplate
是否有可能的替代方案,以便我可以处理vector
和map
的广义专业化?
答案 0 :(得分:2)
正确的语法是:
template < typename T>
class MyTemplate<vector<T> > { /*...*/ };
答案 1 :(得分:2)
我认为你正在寻找这个:
template<typename T>
class MyTemplate {...}
template<typename T>
class MyTemplate<vector<T> > {...}
在上面,当您MyTemplate<vector<int> > x;
和T
为int
时,会使用部分特化。
答案 2 :(得分: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> > { /* ... */ };
答案 3 :(得分:0)
模板可以用以下方式定义:
一旦定义完毕,任何专业化都必须尊重参数的类型。
因此,如果您想专注于需要类型参数的vector
(这是一个模板),您需要拼出vector
的参数来创建(模板化)类型参数:
template <typename T, typename Alloc>
class MyTemplate < std::vector<T, Alloc> > {
};
同样适用于map
,但有更多参数:
template <typename K, typename V, typename C, typename A>
class MyTemplate < std::map<K, V, C, A> > {
};
然后你去:)
答案 4 :(得分:0)
我不确定为类定义模板的语法。你需要看一下。但是,定义模板并不是全部。您需要为每个模板编写类定义。例如,如果你有一个类定义来讨论x类型的1个参数,并且采用类型为y的2个参数,或者等等......那么你需要一个类来处理它。与函数重载相同。您具有相同的函数名称,但每个都使用不同的参数。你为每个人写了一个函数。并且该调用基于参数列表选择正确的函数。
这样一个类......将通过为每种类型定义来对不同的对象进行排序。