Функция шаблона для возврата типа шаблона - PullRequest
0 голосов
/ 27 декабря 2010

У меня есть следующая функция, но мой компилятор (VS2003) говорит, что присвоение T = .... недопустимо.Может кто-нибудь уточнить, что я сделал не так?Тип значения является boost :: Вариант.узел является структурой.

 template <typename T>
    T find_attribute(const std::string& attribute)
    {

        std::vector<boost::shared_ptr<node> >::iterator nodes_iter = _request->begin();

        for (; nodes_iter != _request->end(); nodes_iter++)
        {
            std::vector<node::attrib>::iterator att_iter = (*nodes_iter)->attributes.begin();
            for (; att_iter != att_iter; (*nodes_iter)->attributes.end())
            {
                if ((*att_iter).key.compare(attribute) == 0) {
                    T = (*att_iter).value;  //T : Illegal use of this type as an expression.
                                    return T; 
                            }

            }

        }
    }

Ответы [ 2 ]

5 голосов
/ 27 декабря 2010

Вы должны объявить переменную:

if ((*att_iter).key.compare(attribute) == 0) {
    T temp = (*att_iter).value;  //T : Illegal use of this type as an expression.
    return temp; 
}
4 голосов
/ 27 декабря 2010

T - это тип , а не имя переменной.В общем случае вы должны объявить переменную, как указано @sharptooth (это обычный рабочий процесс для любой функции!).

В вашем конкретном случае лучше просто вернуть значение - никакой дополнительной переменнойнеобходимо:

return (*att_iter).value;

или, еще лучше:

return att_iter->value;
...