powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / templated class :)
5 сообщений из 5, страница 1 из 1
templated class :)
    #34062070
bemtaill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос такой:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
#include <iostream>
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <functional>

using namespace std;

template<class T=int>
class MyVector:public vector<T>
{
public:
	void print (T value){
		cout<<value;
	}
};

 int main()
 {
 
 MyVector<int> myVector;
 myVector.push_back( 1 );
 myVector.push_back( 2 );
 myVector.push_back( 3 );
 myVector.push_back( 4 );
 myVector.push_back( 5 );
 for_each(myVector.begin(),myVector.end(),mem_fun_ref(MyVector<int>::print));
	 
  int i;
  cin>>i;

  return  0 ;
 }

Почему-то ругается:
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\algorithm(21): error C2064: term does not evaluate to a function taking 1 argumentsНо ведь в "алгоритм.х" for_each определен как:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
// TEMPLATE FUNCTION for_each
template<class _InIt, class _Fn1> inline
_Fn1 for_each(_InIt _First, _InIt _Last, _Fn1 _Func)
{	// perform function for each element
  for (; _First != _Last; ++_First)
  _Func(*_First);
  return (_Func);
}

И соответственно вызывать должен функцию с одним аргументом типа T (в моем случае инт). Подскажите, плз, что не так?
...
Рейтинг: 0 / 0
templated class :)
    #34062434
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что за mem_fun_ref?
...
Рейтинг: 0 / 0
templated class :)
    #34062471
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
templated class :)
    #34062638
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это же элементарно, Ватсон. Вы пытаетесь у каждого элемента контецнера вызвать функцию MyVector<int>::print, но у int такой нет
А надо вызвать функциж MyVector<int>::print c элементом контейнера в качестве аргумента, такого стандартного адаптера нет, но можно написать, например так
template <class Ret, class T, class Arg>
class arg_fun_t : public unary_function<Arg, Ret>
{
public:
typedef Ret (T::*F)(Arg);

explicit arg_fun_t(T& t, F f) : __p(t), __f(f) {}
Ret operator() (Arg arg) { return (__p.*__f)(arg); }
private:
T& __p;
F __f;
};
...
Рейтинг: 0 / 0
templated class :)
    #34063035
bemtaill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пасиба, буду разбираться....
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / templated class :)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]