Compare commits

...

2 Commits

Author SHA1 Message Date
659e010a70
feat: implement join-string functor 2024-03-15 10:39:42 +01:00
26e9b317ec
chore: add functor 2024-03-15 10:28:47 +01:00
4 changed files with 62 additions and 0 deletions

21
Functor/CMakeLists.txt Normal file
View File

@ -0,0 +1,21 @@
cmake_minimum_required(VERSION 3.20)
project(
Functor
VERSION 0.1.0
LANGUAGES CXX)
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/../cmake")
include(ExportCompileCommands)
include(sccache)
add_executable(Functor main.cpp)
target_compile_features(Functor PUBLIC cxx_std_20)
set_target_properties(
Functor
PROPERTIES ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/bin"
RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/bin"
RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/bin")

1
Functor/bootstrap.sh Symbolic link
View File

@ -0,0 +1 @@
../scripts/bootstrap.sh

1
Functor/build.sh Symbolic link
View File

@ -0,0 +1 @@
../scripts/build.sh

39
Functor/main.cpp Normal file
View File

@ -0,0 +1,39 @@
#include <iostream>
#include <numeric>
#include <vector>
class join_strings_functor {
private:
std::string separator_ = " ";
public:
join_strings_functor() = default;
join_strings_functor(std::string_view separator) : separator_(separator) {}
std::string operator()(const std::string &left,
const std::string &right) const {
return left + separator_ + right;
}
};
int main(int argc, char *argv[]) {
std::cout << "Functor" << std::endl;
std::vector<std::string> names = {"Albert", "Bernd", "Cora",
"Dave", "Emil", "Frank"};
auto space_joined_string =
std::accumulate(std::next(names.begin()), names.end(), names.front(),
join_strings_functor());
std::cout << "Space-joined string: " << space_joined_string << std::endl;
auto comma_joined_string =
std::accumulate(std::next(names.begin()), names.end(), names.front(),
join_strings_functor(", "));
std::cout << "Comma-joined string: " << comma_joined_string << std::endl;
return EXIT_SUCCESS;
}