This repo contains example C++ files demonstrating separation of concerns and dependency injection.
split_str_1 has both tokenisation and output mixed together. split_str_2 refactors this to separate tokenisation and output into separate methods. split_str_3 uses dependency injection to achieve similar ends.
The code can be built using bazelisk and bazel (see here) using the supplied BUILD file, e.g. bazel build --cxxopt=-std=c++14 //:split_str_1 and then run with ./bazel-bin/split_str_1.
Test code is supplied using the GoogleTest framework (Bazel based quick start is here), e.g. bazel test --cxxopt=-std=c++14 --test_output=all //:split_str_1_test. For split_str_1, there are only five tests, and it is not possible to separate tokenisation and output. Separation in the tests is straightforward for split_str_2, and is achieved for split_str_3 by using a test class
derived from ListOutputStrategy.
split_str_4 is very similar to split_str_2, but demonstrates how the standard library can be used to shorten the code.