www.digitalmars.com         C & C++   DMDScript  

c++.stlsoft - Problem with MFCSTL array_veneer

reply Gabor.Fischer systecs.com (Gabor Fischer) writes:
Hi!


I have just begun to test the array_veneer class in MFCSTL. I use STLSoft  
1.8.3 with Visual C++ 7.0.

I encountered problems when writing simple test programs. First I wanted  
to apply std::sort to array_veneer:



struct MyTrait
{
    typedef int         value_type;
    typedef int         arg_type;
};

.
.
.


mfcstl::array_veneer<CArray<int>, MyTrait> av;
std::sort(av.begin(), av.end());



This fails to compile (six errors).

Ok, next test: Try to use std::back_inserter with array_veneer:


mfcstl::array_veneer<CArray<int>, MyTrait> av1;
mfcstl::array_veneer<CArray<int>, MyTrait> av2;
std::copy(av1.begin(), av1.end(), std::back_inserter(av2));


Fails to compile too (the compiler is complaining that reference is not a  
member of array_veneer)

BTW, by simply creating an array_veneer like above (and nothing else), I  
get two warnings saying that the copy constructor and the copy assignment  
operator could not be created. Is that normal?

And, while I am at it: Why does the array_adaptor class only have a  
const_iterator, not an iterator, and no push_back?




So Long...

Gabor
Jul 19 2005
next sibling parent reply "Matthew" <admin stlsoft.dot.dot.dot.dot.org> writes:
First, let me say that MFCSTL has had very little input over the 
last couple of years, as is probably evident by the code.

If you can post a sample file showing what you want to achieve, I'll 
be able to comment on whether it's possible and, if it is, I would 
think a fix will be forthcoming. ;-)

Cheers

Matthew

P.S. I'm thinking of renaming several 'veneer' classes, so changes 
to meet your requirements might tie in quite nicely.

"Gabor Fischer" <Gabor.Fischer systecs.com> wrote in message 
news:9aBupAFKQNB systecs.com...
 Hi!


 I have just begun to test the array_veneer class in MFCSTL. I use 
 STLSoft
 1.8.3 with Visual C++ 7.0.

 I encountered problems when writing simple test programs. First I 
 wanted
 to apply std::sort to array_veneer:



 struct MyTrait
 {
    typedef int         value_type;
    typedef int         arg_type;
 };

 .
 .
 .


 mfcstl::array_veneer<CArray<int>, MyTrait> av;
 std::sort(av.begin(), av.end());



 This fails to compile (six errors).

 Ok, next test: Try to use std::back_inserter with array_veneer:


 mfcstl::array_veneer<CArray<int>, MyTrait> av1;
 mfcstl::array_veneer<CArray<int>, MyTrait> av2;
 std::copy(av1.begin(), av1.end(), std::back_inserter(av2));


 Fails to compile too (the compiler is complaining that reference 
 is not a
 member of array_veneer)

 BTW, by simply creating an array_veneer like above (and nothing 
 else), I
 get two warnings saying that the copy constructor and the copy 
 assignment
 operator could not be created. Is that normal?

 And, while I am at it: Why does the array_adaptor class only have 
 a
 const_iterator, not an iterator, and no push_back?




 So Long...

 Gabor
 

Jul 19 2005
next sibling parent reply Gabor.Fischer systecs.com (Gabor Fischer) writes:
Hi Matthew!


 If you can post a sample file showing what you want to achieve, I'll
 be able to comment on whether it's possible and, if it is, I would
 think a fix will be forthcoming. ;-)

Well, what Im'm trying to achieve is basically what I have posted: Apply STL algorithms to MFC CArray, with array_veneer and array_adaptor. ;-) We have a third party library here that takes and returns CArrays (and its specialisations). Right now, I am copying the CArrays to vectors and back, whenever I want to use STL algorithms, I was hoping that with MFCSTL I could skip that and could write code like CObArray Array = SomeLibraryFunc( ... ); mfcstl::array_adaptor<CObArray> Adapt; std::sort(Adapt.begin(), Adapt.end(), MyPred); Or like mfcstl::array_veneer<CObArray> Ven; std::copy(SomeSource.begin(), SomeSource.end(), std::back_inserter(Ven)); SomeOtherLibraryFunc(Ven); // Takes CObArray as argument The first one fails because array_adaptor only supports const_iterator, not iterator. But std::sort also fails with array_veneer, although it should work, since array_veneer supports iterator, and it provides random access iterators. And std::back_inserter fails on both array_adaptor and array_veneer because array_adaptor does not have push_back and array_veneer does not have a reference typedef (probably const_reference would also be needed). For your convenience, I will post a small test project which illustrates the problems. So Long... Gabor
Jul 20 2005
parent reply "Matthew" <admin.hat stlsoft.dot.org> writes:
Got it

FYI: I'm writing my next book, Extended STL, at the moment, and in a few days
I'll be working on the material about 
adapting non-STL collections, so this'll be ideal material. As such, I think I
may have some good news for you next 
week.

Cheers

Matthew

"Gabor Fischer" <Gabor.Fischer systecs.com> wrote in message
news:9aFuyXOpQNB systecs.com...
 Hi Matthew!


 If you can post a sample file showing what you want to achieve, I'll
 be able to comment on whether it's possible and, if it is, I would
 think a fix will be forthcoming. ;-)

Well, what Im'm trying to achieve is basically what I have posted: Apply STL algorithms to MFC CArray, with array_veneer and array_adaptor. ;-) We have a third party library here that takes and returns CArrays (and its specialisations). Right now, I am copying the CArrays to vectors and back, whenever I want to use STL algorithms, I was hoping that with MFCSTL I could skip that and could write code like CObArray Array = SomeLibraryFunc( ... ); mfcstl::array_adaptor<CObArray> Adapt; std::sort(Adapt.begin(), Adapt.end(), MyPred); Or like mfcstl::array_veneer<CObArray> Ven; std::copy(SomeSource.begin(), SomeSource.end(), std::back_inserter(Ven)); SomeOtherLibraryFunc(Ven); // Takes CObArray as argument The first one fails because array_adaptor only supports const_iterator, not iterator. But std::sort also fails with array_veneer, although it should work, since array_veneer supports iterator, and it provides random access iterators. And std::back_inserter fails on both array_adaptor and array_veneer because array_adaptor does not have push_back and array_veneer does not have a reference typedef (probably const_reference would also be needed). For your convenience, I will post a small test project which illustrates the problems. So Long... Gabor

Jul 21 2005
next sibling parent "Matthew" <admin stlsoft.dot.dot.dot.dot.org> writes:
I'm going to release STLSoft 1.8.4 in the next day or so, and this 
will _not_ be in there, but I will look at it as soon as that 
release is done.

"Matthew" <admin.hat stlsoft.dot.org> wrote in message 
news:dbnoar$1sa3$1 digitaldaemon.com...
 Got it

 FYI: I'm writing my next book, Extended STL, at the moment, and in 
 a few days I'll be working on the material about adapting non-STL 
 collections, so this'll be ideal material. As such, I think I may 
 have some good news for you next week.

 Cheers

 Matthew

 "Gabor Fischer" <Gabor.Fischer systecs.com> wrote in message 
 news:9aFuyXOpQNB systecs.com...
 Hi Matthew!


 If you can post a sample file showing what you want to achieve, 
 I'll
 be able to comment on whether it's possible and, if it is, I 
 would
 think a fix will be forthcoming. ;-)

Well, what Im'm trying to achieve is basically what I have posted: Apply STL algorithms to MFC CArray, with array_veneer and array_adaptor. ;-) We have a third party library here that takes and returns CArrays (and its specialisations). Right now, I am copying the CArrays to vectors and back, whenever I want to use STL algorithms, I was hoping that with MFCSTL I could skip that and could write code like CObArray Array = SomeLibraryFunc( ... ); mfcstl::array_adaptor<CObArray> Adapt; std::sort(Adapt.begin(), Adapt.end(), MyPred); Or like mfcstl::array_veneer<CObArray> Ven; std::copy(SomeSource.begin(), SomeSource.end(), std::back_inserter(Ven)); SomeOtherLibraryFunc(Ven); // Takes CObArray as argument The first one fails because array_adaptor only supports const_iterator, not iterator. But std::sort also fails with array_veneer, although it should work, since array_veneer supports iterator, and it provides random access iterators. And std::back_inserter fails on both array_adaptor and array_veneer because array_adaptor does not have push_back and array_veneer does not have a reference typedef (probably const_reference would also be needed). For your convenience, I will post a small test project which illustrates the problems. So Long... Gabor


Jul 25 2005
prev sibling parent "Matthew" <admin stlsoft.dot.dot.dot.dot.org> writes:
Gabor

I'm working on this right now. I did a fair amount yesterday, and 
expect to having something testable in the next 48hrs

Cheers

Matthew

"Matthew" <admin.hat stlsoft.dot.org> wrote in message 
news:dbnoar$1sa3$1 digitaldaemon.com...
 Got it

 FYI: I'm writing my next book, Extended STL, at the moment, and in 
 a few days I'll be working on the material about adapting non-STL 
 collections, so this'll be ideal material. As such, I think I may 
 have some good news for you next week.

 Cheers

 Matthew

 "Gabor Fischer" <Gabor.Fischer systecs.com> wrote in message 
 news:9aFuyXOpQNB systecs.com...
 Hi Matthew!


 If you can post a sample file showing what you want to achieve, 
 I'll
 be able to comment on whether it's possible and, if it is, I 
 would
 think a fix will be forthcoming. ;-)

Well, what Im'm trying to achieve is basically what I have posted: Apply STL algorithms to MFC CArray, with array_veneer and array_adaptor. ;-) We have a third party library here that takes and returns CArrays (and its specialisations). Right now, I am copying the CArrays to vectors and back, whenever I want to use STL algorithms, I was hoping that with MFCSTL I could skip that and could write code like CObArray Array = SomeLibraryFunc( ... ); mfcstl::array_adaptor<CObArray> Adapt; std::sort(Adapt.begin(), Adapt.end(), MyPred); Or like mfcstl::array_veneer<CObArray> Ven; std::copy(SomeSource.begin(), SomeSource.end(), std::back_inserter(Ven)); SomeOtherLibraryFunc(Ven); // Takes CObArray as argument The first one fails because array_adaptor only supports const_iterator, not iterator. But std::sort also fails with array_veneer, although it should work, since array_veneer supports iterator, and it provides random access iterators. And std::back_inserter fails on both array_adaptor and array_veneer because array_adaptor does not have push_back and array_veneer does not have a reference typedef (probably const_reference would also be needed). For your convenience, I will post a small test project which illustrates the problems. So Long... Gabor


Aug 03 2005
prev sibling parent Gabor.Fischer systecs.com (Gabor Fischer) writes:
Hi!

Here comes my test project:
Jul 20 2005
prev sibling parent "Matthew" <matthew stlsoft.com> writes:
Check out the CArray_cadaptor and CArray_iadaptor adaptor classes released
in the
1.9.1 beta.

Sorry for the delay. ;-)

Cheers

Matthew


"Gabor Fischer" <Gabor.Fischer systecs.com> wrote in message
news:9aBupAFKQNB systecs.com...
 Hi!


 I have just begun to test the array_veneer class in MFCSTL. I use STLSoft
 1.8.3 with Visual C++ 7.0.

 I encountered problems when writing simple test programs. First I wanted
 to apply std::sort to array_veneer:



 struct MyTrait
 {
    typedef int         value_type;
    typedef int         arg_type;
 };

 .
 .
 .


 mfcstl::array_veneer<CArray<int>, MyTrait> av;
 std::sort(av.begin(), av.end());



 This fails to compile (six errors).

 Ok, next test: Try to use std::back_inserter with array_veneer:


 mfcstl::array_veneer<CArray<int>, MyTrait> av1;
 mfcstl::array_veneer<CArray<int>, MyTrait> av2;
 std::copy(av1.begin(), av1.end(), std::back_inserter(av2));


 Fails to compile too (the compiler is complaining that reference is not a
 member of array_veneer)

 BTW, by simply creating an array_veneer like above (and nothing else), I
 get two warnings saying that the copy constructor and the copy assignment
 operator could not be created. Is that normal?

 And, while I am at it: Why does the array_adaptor class only have a
 const_iterator, not an iterator, and no push_back?




 So Long...

 Gabor

Dec 20 2005