Ошибка компиляции шаблона функции c ++ "containerType" не является шаблоном " - PullRequest
3 голосов
/ 09 августа 2010

Я пытаюсь написать функцию для «строкового преобразования» параметров с целью ведения журнала. Например, я хотел бы написать что-то вроде этого:

vector<string> queries; 
set<uint_8> filters;
LOG(INFO) << stringify<vector, string>(queries);
LOG(INFO) << stringify<set, uint_8>(filters);

Вот шаблон функции, который я написал:

template <typename containerType, typename elemType>
string _stringify(const string name, const containerType<elemType> &elems) {
    ostringstream os;
    os << name << ": [";
    BOOST_FOREACH(elemType elem, elems) {
        os << elem << ",";    
    }
    os << "]";
    return os.str();
} 

Вот сообщение об ошибке, которое я получил: error: ‘containerType’ is not a template

Спасибо, Alex

1 Ответ

9 голосов
/ 09 августа 2010

Вам необходимо использовать параметр шаблона шаблона, например,

template <template <typename> class containerType, typename elemType>
string _stringify(const string name, const containerType<elemType>& elems)

Обратите внимание, что если вы планируете использовать это со стандартными контейнерами библиотеки, большинство из них имеют несколько параметров шаблона (например, контейнеры последовательности имеют два: один для типа значения и один для типа распределителя).

Вероятно, проще (и лучше) использовать typedef value_type, который есть во всех контейнерах. Например,

template <typename ContainerT> 
void f(const ContainerT& c)
{
    typedef typename ContainerT::value_type ElementT;  
    // Use ContainerT and ElementT
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...