использование шаблонов с векторами и векторными функциями - PullRequest
1 голос
/ 19 октября 2011

Я пытаюсь создать шаблон для вектора. В основном у меня есть следующее:

std::vector<Word> concordance = push_vector(data);

Где Word - это структура, содержащая std :: string и int, а data - это std :: string. В моем заголовочном файле у меня есть:

 template <typename T>
 std::vector<T> push_vector(std::string&);

Однако, когда я компилирую, я получаю следующую ошибку:

main.cpp: In function ‘int main(int, char**)’:
main.cpp:27:53: error: no matching function for call to ‘push_vector(std::string&)’
main.cpp:27:53: note: candidate is:
templates.h:13:20: note: template<class T> std::vector<T> push_vector(std::string&)

Я знаю, что что-то упускаю при реализации функции шаблона, но я не уверен, что именно. Спасибо за ваше время заранее.

Ответы [ 2 ]

2 голосов
/ 19 октября 2011

Если я понимаю, что вы действительно хотите сделать, возможно, что-то вроде этого:

template <typename T>
void push_vector(const std::string& str, std::vector<T>& vec)
{
   // convert str to T if possible
   // throw on failure maybe?
   // assign vec with converted data
}

Тогда назовите это так:

std::string data("Hello");
std::vector<Word> concordance;
push_vector(data, concordance);

В противном случае вам пришлось бы явно дать функции ее аргумент шаблона, поскольку она не может быть выведена из rvalue , которое вы присваиваете возвращаемому значению того, каким должен быть тип. Не стоит упоминать, что передача параметра по ссылке, как это, поможет вам сэкономить.

1 голос
/ 19 октября 2011

Попробуйте:

std::vector<Word> concordance = push_vector<Word>(data);

Компилятор не может разрешить это без подсказки, поскольку вы не используете T нигде, кроме возвращаемого значения.Обычно параметр шаблона также используется в качестве типа одного (или нескольких) параметров функций шаблона, и тогда компилятор сможет разрешить его напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...