How about using a template? Following is pseudocode, with types
elided... And should probably be encapsulated in whatever class
that iters is.
#ifdef TEST_ALGORITHM
constexpr bool is_test = true;
#else
constexpr bool is_test = false;
#endif
template<bool save_data = false> void push_back_data(iters, iteration)
{
}
template<true> void push_back_data(iters, iteration)
{
iters.iterations.push_back(iteration);
}
template<bool save_data = false> void save_iterations(datafile)
{
}
template<true> void save_iterations(datafile)
{
iters.save(datafile);
}
...
void myClass:algorithm()
{
// ...
push_back_data<is_test>(iters, iterations);
// ...
save_iterations<is_test>(datafile);
}
}