Очевидное, что нужно сделать, это просто поместить сообщение об ошибке в foo
.Если вы не можете этого сделать, просто оберните это:
bool fooWithLogging(int x, iny y)
{
auto result = foo(x,y);
if (result)
{
std::cerr << "Error occurred with values" << x << "," << y << std::endl;
}
}
Вызов обертки в вашем коде:
void func1()
{
...
fooWithLogging(x,y);
...
}
void func2()
{
...
fooWithLogging(x,y);
...
}
Бонус: сделайте запись динамической:
#ifdef DEBUG
bool g_isFooLoggingEnabled = true;
#else
bool g_isFooLoggingEnabled = false;
#endif
bool fooWithLogging(int x, iny y)
{
auto result = foo(x,y);
if (result && g_isFooLoggingEnabled)
{
std::cerr << "Error occurred with values" << x << "," << y << std::endl;
}
}
А теперь с вашими требованиями FILE и LINE, которые только что упоминались в комментариях:
bool _fooWithLogging(int x, iny y, const std::string& filename, int line)
{
auto result = foo(x,y);
if (result && g_isFooLoggingEnabled)
{
std::cerr << "Error occurred in file" << filename << " on line " << line << " with values" << x << "," << y << std::endl;
}
}
#define FooWithLogging(x, y) _fooWithLogging(x, y, __FILE__, __LINE__)
Затем в коде:
void func1()
{
...
FooWithLogging(x,y);
...
}