PDA

Tam Sürümünü Görmek İçin : hata nerede ? ...


mr1yh1
27/05/2005, 03:51
bu kod neden çalışmıyor ?..
bfoo, struct binary_function tipinde nesne..
less<int> , aynı struct dan türüyor..
less<int>() , less<int> tipinde bir nesne..
atama kabul ediliyor..
fakat fonksiyonu çağırmak mümkün olmuyor..

#include <iostream>
#include <functional>
using namespace std;

int main()
{
binary_function<int,int,bool> *bfoo;
bfoo = &less<int>() ;//less binary function dan türediğine göre..
if ( (*bfoo)(2,3) ) cout << "2<3";//derleme hatası ..
}


error: no match for call to `(std::binary_function<int, int,
bool>) (int, int)'


mr1yh1
27/05/2005, 05:16
hatayı buldum..
maalesef stl ,binary_function içerisinde parantez operatörü tanımlamamış..
bu yüzden stl içindeki bir sürü hazır fonksiyonu bu şekilde kullanamıyorum.. :2:
ancak kendi sınıflarımı tanımlayınca oluyor:
#include <iostream>
#include <functional>
using namespace std;

template< class arg1, class arg2 , class result >
struct my_binary_function : binary_function < arg1 , arg2 , result >
{
virtual result operator () ( arg1 a, arg2 b ) = 0;
};

template < class T >
struct my_less : my_binary_function< T , T , bool >
{
bool operator () ( T a, T b ) { return a<b ; }
};

int main()
{
my_binary_function<int,int,bool> *bfoo;
bfoo = & my_less<int>() ;
if ( (*bfoo)(2,3) ) cout << "2<3";
}