thrift-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Raghava Mutharaju <m.vijayaragh...@gmail.com>
Subject Re: C++ thrift code -- operator < not defined
Date Mon, 26 Jul 2010 22:02:02 GMT
Hi Rush,

Thank you for the reply :). I was thinking that the compiler can do
something on the lines of what it does for operator ==. It checks for the
equality of all the fields. Similarly, may be operator <() can compare all
the fields or provide an option for a comparator.

If you don't provide the definition for operator <, then I might be missing
something here because I get linker errors due to that. I tried the thrift
test classes that come with the source. They also generate the same kind of
linker errors. Errors from one of the tests that come with thrift is given
below. I do include boost & thrift libs and provide -lthrift option to g++.


Undefined symbols:
  "thrift::test::Insanity::operator<(thrift::test::Insanity const&) const",
referenced from:
      std::less<thrift::test::Insanity>::operator()(thrift::test::Insanity
const&, thrift::test::Insanity const&) constin ThriftTest_types.o
      bool std::operator< <thrift::test::Insanity const,
std::basic_string<char, std::char_traits<char>, std::allocator<char> >
>(std::pair<thrift::test::Insanity const, std::basic_string<char,
std::char_traits<char>, std::allocator<char> > > const&,
std::pair<thrift::test::Insanity const, std::basic_string<char,
std::char_traits<char>, std::allocator<char> > > const&)in
ThriftTest_types.o
      bool std::operator< <thrift::test::Insanity const,
std::basic_string<char, std::char_traits<char>, std::allocator<char> >
>(std::pair<thrift::test::Insanity const, std::basic_string<char,
std::char_traits<char>, std::allocator<char> > > const&,
std::pair<thrift::test::Insanity const, std::basic_string<char,
std::char_traits<char>, std::allocator<char> > > const&)in
ThriftTest_types.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
make: *** [ThriftTest] Error 1


Regards,
Raghava.

On Mon, Jul 26, 2010 at 5:40 PM, Rush Manbert <rush@manbert.com> wrote:

> Hi Raghava,
>
> I'm surprised that none of the developers have chimed in, but I'll give it
> a try.
>
> The compiler declares the operator, but it can't define it for you because,
> in general, it can't know what "less than" means for your thrift struct. But
> the compiler does know that you'll need to define this operator if you want
> to put your structure into a set, or use it as a key in a map, so it
> helpfully provides the declaration. You need to provide the definition.
>
> I would imaging that we are like many other thrift users. We use it for
> many things, and have lots of fairly complicated structures defined, but I
> have yet to need to write an implementation for operator<, because we don't
> use the thrift classes in a way that requires it.
>
> - Rush
>
> On Jul 26, 2010, at 2:18 PM, Raghava Mutharaju wrote:
>
> > Hi,
> >
> > I got the answer on why overloading of operator < is required. std::set
> > orders its elements, so "<" operator is required for comparison on the
> type
> > of elements it is holding.
> >
> > But I haven't got answer to my other question -- why doesn't thrift
> compiler
> > generate code for this? Does the thrift community write their own
> > implementations for "operator <" ?
> >
> > Thank you.
> >
> > Regards,
> > Raghava.
> >
> > On Mon, Jul 26, 2010 at 4:09 PM, Raghava Mutharaju <
> > m.vijayaraghava@gmail.com> wrote:
> >
> >> Hello all,
> >>
> >> In the code that thrift generates for C++, in all the classes, it
> overloads
> >> 3 operators, ==, != and <. Implementations for == and != are provided
> but
> >> there won't be any implementation for < operator. Why is this so? How
> come
> >> it doesn't generate any compilation errors? (except in one case I got a
> >> linker error -- mentioned in my previous post). How are these overloaded
> >> operators used?
> >>
> >> Thank you.
> >>
> >> Regards,
> >> Raghava.
> >>
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message