Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / templated class :) / 5 сообщений из 5, страница 1 из 1
18.10.2006, 00:43
    #34062070
bemtaill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
templated class :)
Вопрос такой:
Код: 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
18.10.2006, 10:03
    #34062434
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
templated class :)
А что за mem_fun_ref?
...
Рейтинг: 0 / 0
18.10.2006, 10:17
    #34062471
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
templated class :)
...
Рейтинг: 0 / 0
18.10.2006, 11:06
    #34062638
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
templated class :)
Это же элементарно, Ватсон. Вы пытаетесь у каждого элемента контецнера вызвать функцию 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
18.10.2006, 12:17
    #34063035
bemtaill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
templated class :)
Пасиба, буду разбираться....
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / templated class :) / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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