27 Ağustos 2018 Pazartesi

Effective C++: Item 41 - Implicit interfaces

Örnek
Elimizde şöyle bir kod olsun.
template<typename T>
void doProcessing(T& w)
{
  if (w.size() > 10 && w != someNastyWidget) {
   ...
}
T tipinin int dönene size() metodu olabilir. Şöyle yaparız
struct MyT
{
  // Some stuff...

  int size()
  {
    return some_calculation_returning_int();
  }

  // Some more stuff...
};
T tipinin int'e çevirilebilen bir tip dönen size() metodu olabilir. Şöyle yaparız
struct MySizeType
{
  // Some stuff...

  operator int()
  {
    return some_calculation_returning_int();
  }

  // Some more stuff...
};

struct MyT
{
  // Some stuff...

  MySizeType size()
  {
    return MySizeType();
  }

  // Some more stuff...
};
T tipinin int için > operator tanımlayan bir tip dönen size() metodu olabilir. Şöyle yaparız
struct MyOtherSizeType
{
  // Some stuff...

  operator>(int other)
  {
    return some_calculation_returning_int() > other;
  }

  // Some more stuff...
};

struct MyT
{
  // Some stuff...

  MyOtherSizeType size()
  {
    return MyOtherSizeType();
  }

  // Some more stuff...
};


Hiç yorum yok:

Yorum Gönder