Загадка с содержимым файла заголовка [Вопрос для собеседования]

Каким должно быть содержимое файла заголовка Fill.hpp, чтобы следующий код работал, т.е. работали оба assert?

#include <iostream>
#include <string>
#include <cassert>
#include "Fill.hpp"

int main() 
{
  std::string s = multiply(7,6);
  int i = multiply(7,6);
  assert(s == "42");
  assert(i == 42);
}

TIA


person McCutcheon Jr    schedule 25.04.2011    source источник
comment


Ответы (3)


Определите функции преобразования для преобразования типа multiply в int и std::string, как показано в методе 1, или используйте метод 2 (аналогичный к 1)

Метод 1

struct multiply
{  
    int t1,t2;
    operator std::string()
    {
        std::stringstream k;
        k<<(t1*t2);
        return k.str();
    }
    operator int()
    {   
        return t1*t2;
    }
    multiply(int x, int y):t1(x),t2(y){}
};

Способ 2

class PS
{
  int _value;
  public:
  PS(int value) : _value(value) {}    
  operator std::string() 
  {
    std::ostringstream oss;
    oss << _value;
    return oss.str();
  }    
  operator int() 
  {
    return _value;
  }
};

PS multiply(int a, int b) 
{
  return PS(a * b);
}
person Prasoon Saurav    schedule 25.04.2011

Самый простой ответ, который я могу придумать:

// Fill.hpp
struct multiply {
  multiply(int, int) {}
  operator std::string() { return "42"; }
  operator int() { return 42; }
};
person Robᵩ    schedule 25.04.2011

Как насчет простого:

#define NDEBUG
person Community    schedule 25.04.2011