-
June 13th, 2011, 05:13 PM
#1
template and boost::tuples
The code is as follows:
#include "boost/tuple/tuple.hpp"
template< typename iter1_T = boost::tuples::null_type,
typename iter2_T = boost::tuples::null_type,
typename iter3_T = boost::tuples::null_type,
typename iter4_T = boost::tuples::null_type,
typename iter5_T = boost::tuples::null_type,
typename iter6_T = boost::tuples::null_type,
typename iter7_T = boost::tuples::null_type,
typename iter8_T = boost::tuples::null_type,
typename iter9_T = boost::tuples::null_type,
typename iter10_T = boost::tuples::null_type
>
struct tuples_N {
typedef boost::tuple<iter1_T&, iter2_T&, iter3_T&, iter4_T&, iter5_T&, iter6_T&, iter7_T&, iter8_T&, iter9_T&, iter10_T&> tuple_N;
};
int main() {
int *x;
int *y;
int *z;
tuples_N<int*,int*,int*>::tuple_N *pp = new tuples_N<int*,int*, int*>::tuple_N(x,y,z);
}
Got a compilation warning, though the compilation went thru. The warning is rather long.
You will see it if you compile it with g++:
g++ (GCC) 4.1.2 20080704 (Red Hat 4.1.2-48)
In essence, the warning is about
/usr/include/boost/tuple/detail/tuple_basic.hpp:447: warning: default-initialization of 'boost::tuples::null_type& boost::tuples::cons<boost::tuples::null_type&, boost::tuples::null_type>::head', which has reference type
I'm wondering if there's a way to get rid of the warning by changing the code in main() as
I can't change the struct. I understand that if I change iter1_T& to iter1_T in the struct, then the warning goes away.
-
June 15th, 2011, 03:59 AM
#2
Re: template and boost::tuples
Originally Posted by twinlove
I'm wondering if there's a way to get rid of the warning by changing the code in main() as
I can't change the struct. I understand that if I change iter1_T& to iter1_T in the struct, then the warning goes away.
What's the purpose of tuples_N? What are you trying to do?
I don't see much use of storing references in a tuple. It's easier to store values.
Cheers, D Drmmr
Please put [code][/code] tags around your code to preserve indentation and make it more readable.
As long as man ascribes to himself what is merely a posibility, he will not work for the attainment of it. - P. D. Ouspensky
-
June 15th, 2011, 08:51 AM
#3
Re: template and boost::tuples
Originally Posted by twinlove
I'm wondering if there's a way to get rid of the warning by changing the code in main() as
I think the problem is that tuple_N defines the tuple to hold 10 reference types and that references, unlike pointers, never can be null. This means you'll have to supply a value to all 10 parameters when an object is instantiated, like,
Code:
boost::tuples::null_type n; // dummy variable to supply reference
tuples_N<int*,int*,int*>::tuple_N *pp =
new tuples_N<int*,int*,int*>::tuple_N(x,y,z,n,n,n,n,n,n,n); // all 10 parameters supplied
This takes care of the error/warning but is unsatisfactory of course since the tuple now holds 10 parameters instead of the wanted three (the type is okay but the object is wasteful).
To fix this flaw I suppose a more "advanced" tuples_N template must be introduced. In the meantime you could use boost:tuple directly like,
Code:
boost::tuple<int*&,int*&,int*&> *pp = new boost::tuple<int*&,int*&,int*&>(x,y,z);
Last edited by nuzzle; June 15th, 2011 at 09:55 AM.
-
June 17th, 2011, 07:49 AM
#4
Re: template and boost::tuples
-
June 17th, 2011, 07:50 AM
#5
Re: template and boost::tuples
Thanks a lot for your help.
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|