我编写了一个函数来迭代list
,vector
或者字符串上带iterator
的任何东西,该函数在字符串上返回一对相同类型的容器.... / p>
我写了以下内容,但我没有编译,我尝试将容器类型捕获为C,将分配器捕获为A.
重要的是,我只使用C ++ 98。
template<template<std::string, A> class C, class A>
static std::pair<T<std::string, A>, T<std::string, A> > Check(const T<std::string, A>::iterator &beg, const T<std::string, A>::iterator &end)
{
//....
}
要调用我使用的代码:
vector<string> toCheck; toCheck += "test1", "test2";
pair<vector<string>, vector<string> > found = Check(toCheck.begin(), check.end());
您是否了解如何编写该功能?
答案 0 :(得分:3)
模板模板参数只能涉及模板参数,而不涉及模板参数。这应该有效:
template<template<class, class> class C, class A>
static std::pair<C<std::string, A>, C<std::string, A> > Check(const typename C<std::string, A>::iterator &beg, const typename C<std::string, A>::iterator &end)
{
//....
}
正如@ Jarod42在评论中指出的那样,上述签名不允许对C
和A
进行类型扣除。并且它无论如何都与您的用例不符;为此,请使用此功能,这将推断C
和A
就好了:
template<template<class, class> class C, class A>
static std::pair<C<std::string, A>, C<std::string, A> > Check(const C<std::string, A> &container)
{
//....
}