[ITK] [ITK-users] Operator overloading in ITK objects.

DVigneault davis.vigneault at gmail.com
Tue Oct 14 11:31:09 EDT 2014


All--

I've defined an ITK object inheriting from itk::DataObject (full header file
copied below).  The object has two properties: Index and Value.  I've tried
to overload the == and < operators (basing my syntax off of itk::Point) so
that the two objects would be equal if they have the same index, and one
would be less than the other if one's value is less than the other's:

  bool operator==(const Self & pt) const {
    return this->GetIndex() == pt->GetIndex(); }
  
  bool operator<(const Self & pt) const {
    return this->GetValue() < pt->GetValue(); }

However, the less than operator isn't functioning as intended:

	typedef IndexValuePair< IndexType, PixelType > PairType;
	typename PairType::Pointer pair1 = PairType::New();
	IndexType index1;
	pair1->SetIndex( index1.Fill( 0 ) );
	pair1->SetValue( 1 );
	
	typename PairType::Pointer pair2 = PairType::New();
	IndexType index2;
	pair2->SetIndex( index2.Fill( 1 ) );
	pair2->SetValue( 0 );
	
	std::cout << (pair1 == pair2) << std::endl; // 0
	std::cout << (pair1 == pair1) << std::endl; // 1
	std::cout << (pair1 < pair2) << std::endl; // 1

Interestingly, the results do not change if I comment out the overloading
operators in the header file, or if I change the values of the pairs,
suggesting that the program is comparing the objects based on some other
criteria.  Any ideas what I'm doing wrong?  Apologies in advance if this is
more of a c++ question and less of an ITK question--I'm sometimes not sure
whether my problem is due to my misunderstanding the language or the
library.

Best,

--Davis

Best, and thanks,

--Davis

*** Header **

#ifndef __itkIndexValuePair_h
#define __itkIndexValuePair_h

#include "itkDataObject.h"

namespace itk
{

template < typename IndexType, typename ValueType >
class IndexValuePair:public DataObject
{

public:

  /** Standard class typedefs. */
  typedef IndexValuePair             Self;
  typedef DataObject                 Superclass;
  typedef SmartPointer< Self >       Pointer;
  typedef SmartPointer< const Self > ConstPointer;

  /** Method for creation through the object factory. */
  itkNewMacro(Self);

  /** Standard part of every itk Object. */
  itkTypeMacro(IndexValuePair, DataObject);
  
  itkSetMacro( Index, IndexType );
  itkGetMacro( Index, IndexType );
  
  itkSetMacro( Value, ValueType );
  itkGetMacro( Value, ValueType );
  

  /** Compare two points for equality. */
  bool
  operator==(const Self & pt) const
  {
    return this->GetIndex() == pt->GetIndex();
  }
  
  /** Less than. */
  bool
  operator<(const Self & pt) const
  {
    return this->GetValue() < pt->GetValue();
  }

protected:
  /** Constructor for use by New() method. */
  IndexValuePair() {}
  ~IndexValuePair() {}
//   virtual void PrintSelf(std::ostream & os, Indent indent) const;

  IndexType m_Index;
  ValueType m_Value;

private:
  IndexValuePair(const Self &);       //purposely not implemented
  void operator=(const Self &); //purposely not implemented

};

}

#endif



--
View this message in context: http://itk-insight-users.2283740.n2.nabble.com/Operator-overloading-in-ITK-objects-tp7586346.html
Sent from the ITK Insight Users mailing list archive at Nabble.com.
_____________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html

Kitware offers ITK Training Courses, for more information visit:
http://www.kitware.com/products/protraining.php

Please keep messages on-topic and check the ITK FAQ at:
http://www.itk.org/Wiki/ITK_FAQ

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/insight-users



More information about the Community mailing list