Замена оператора ... Как реализовать ?

 

Суть следующая есть некое условие 

if(A && B && Z || K && D)

 Возможно ли программно изменить операторы &&, ||  ????

 
Если это объекты, то да
 
Комбинатор:
Если это объекты, то да

Можно простой пример ? 

ЗЫ справку смотрел и читал , не понимаю ... 

 

Перегрузка функций в зависимости от типа переданного параметра вызывается нужная функция.

bool function(int s)
{
   return(A && B && Z || K && D)
}

bool function()
{
   return(A || B && Z || K && D)
}

bool function(double s)
{
   return(A && B && Z || K || D)
}
 
Посмотрите еще в сторону перегрузки операторов. Хотя, напрямую && и || перегрузить нельзя, но можно использовать перегрузку операторов &= и |=.
 
Vladimir Pastushak:

Суть следующая есть некое условие 

 Возможно ли программно изменить операторы &&, ||  ????

Непосредственно операторы заменить нельзя.

Выбор когда выполняется, при запуске программы, или в процессе выполнения тоже надо менять? 

 
Dmitry Fedoseev:

Непосредственно операторы заменить нельзя.

Выбор когда выполняется, при запуске программы, или в процессе выполнения тоже надо менять? 

Да.
 
Если при запуске программы, пишем базовый класс, в нем виртуальный метод с параметрами А, Б, С, и куча дочерних классов с различными вариантами этой функции. На запуске выбирается дочерний класс. 
 
Vladimir Pastushak:
Да.

Да что? Как на такой вопрос можно ответить да или нет?

"Да" при запуске или "да" в процессе тоже? 

 
Dmitry Fedoseev:
Да что? Как на такой вопрос можно ответить да или нет?
Пардон, Да - в процессе выполнения тоже надо менять
 
Vladimir Pastushak:

Можно простой пример ?

class BoolWrapper
{
public:
   BoolWrapper(bool value)
      : value_(value)
   {
   }
   
   bool operator && (const BoolWrapper& other) const
   {
      return value_ && other.value_;
   }
   
private:
   bool value_;
};

string Str(bool value)
{
   return value ? "true" : "false";
}

int OnInit()
{
   BoolWrapper b1(true), b2(false);
   
   Print(Str(b1 && b1));
   Print(Str(b1 && b2));
   Print(Str(b2 && b1));
   Print(Str(b2 && b2));
   
   return(INIT_SUCCEEDED);
}
Причина обращения: