This is a very short follow-up to the solution for removing duplicate code based on C++ policy-based design.
As I mentioned in that article, there are times when you need something more simple. And I can think of two other solutions.
The starting point is the duplication of lines 15 and 27:
#include <cassert>
struct Object {
int prop_1{};
int prop_2{};
int prop_3{};
};
void set_object_properties_1(Object& object)
{
if (object.prop_1 == 0) {
object.prop_1 = 1;
}
object.prop_2 = object.prop_1 * 4; // duplicate
object.prop_3 = object.prop_2 * 5 + object.prop_1 * 2;
}
void set_object_properties_2(Object& object)
{
if (object.prop_1 == 0) {
object.prop_1 = 3;
}
object.prop_1 *= 2;
object.prop_2 = object.prop_1 * 4; // duplicate
object.prop_3 = object.prop_1 * object.prop_2;
}
int main()
{
Object object_1{};
set_object_properties_1(object_1);
assert(object_1.prop_1 == 1);
assert(object_1.prop_2 == 4);
assert(object_1.prop_3 == 22);
Object object_2{};
set_object_properties_2(object_2);
assert(object_2.prop_1 == 6);
assert(object_2.prop_2 == 24);
assert(object_2.prop_3 == 144);
}
Continue reading Removing duplicate code