diff options
author | Marco Poletti <poletti.marco@gmail.com> | 2020-08-09 12:30:58 -0700 |
---|---|---|
committer | Marco Poletti <poletti.marco@gmail.com> | 2020-08-09 12:30:58 -0700 |
commit | 6f3760672a0d2c772306e737d894a2ae2d8c5f58 (patch) | |
tree | 9a73e637603eca3b7e419047459c2bf6b292f521 | |
parent | f83a61fa1f58e4bba0fbf68fa5e70eb9d6c85314 (diff) | |
download | google-fruit-6f3760672a0d2c772306e737d894a2ae2d8c5f58.tar.gz |
Add some example code to show how to depend on Fruit from a bazel project.
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | extras/bazel_usage_example/BUILD | 8 | ||||
-rw-r--r-- | extras/bazel_usage_example/WORKSPACE | 19 | ||||
-rw-r--r-- | extras/bazel_usage_example/main.cpp | 55 |
4 files changed, 83 insertions, 0 deletions
@@ -18,3 +18,4 @@ bench_results /*.vcxproj.user /out/build/x64-Debug /out/build/x64-Debug cxx-17 +/extras/bazel_usage_example/bazel-* diff --git a/extras/bazel_usage_example/BUILD b/extras/bazel_usage_example/BUILD new file mode 100644 index 0000000..47934aa --- /dev/null +++ b/extras/bazel_usage_example/BUILD @@ -0,0 +1,8 @@ + +licenses(["notice"]) + +cc_binary( + name = "hello_world", + srcs = ["main.cpp"], + deps = ["@com_google_fruit//third_party/fruit"], +) diff --git a/extras/bazel_usage_example/WORKSPACE b/extras/bazel_usage_example/WORKSPACE new file mode 100644 index 0000000..e037168 --- /dev/null +++ b/extras/bazel_usage_example/WORKSPACE @@ -0,0 +1,19 @@ +load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository") + +git_repository( + name = "com_github_nelhage_rules_boost", + branch = "master", + remote = "https://github.com/nelhage/rules_boost", +) + +load("@com_github_nelhage_rules_boost//:boost/boost.bzl", "boost_deps") +boost_deps() + +load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository") + +git_repository( + name = "com_google_fruit", + remote = "https://github.com/google/fruit", + branch = "master", + strip_prefix = "extras/bazel_root", +) diff --git a/extras/bazel_usage_example/main.cpp b/extras/bazel_usage_example/main.cpp new file mode 100644 index 0000000..4364993 --- /dev/null +++ b/extras/bazel_usage_example/main.cpp @@ -0,0 +1,55 @@ + +#include <fruit/fruit.h> +#include <iostream> + +using fruit::Component; +using fruit::Injector; + +class Writer { +public: + virtual void write(std::string s) = 0; +}; + +class StdoutWriter : public Writer { +public: + // Like "StdoutWriter() = default;" but also marks this constructor as the + // one to use for injection. + INJECT(StdoutWriter()) = default; + + virtual void write(std::string s) override { + std::cout << s; + } +}; + +class Greeter { +public: + virtual void greet() = 0; +}; + +class GreeterImpl : public Greeter { +private: + Writer* writer; + +public: + // Like "GreeterImpl(Writer* writer) {...}" but also marks this constructor + // as the one to use for injection. + INJECT(GreeterImpl(Writer* writer)) : writer(writer) {} + + virtual void greet() override { + writer->write("Hello world!\n"); + } +}; + +Component<Greeter> getGreeterComponent() { + return fruit::createComponent().bind<Writer, StdoutWriter>().bind<Greeter, GreeterImpl>(); +} + +int main() { + + Injector<Greeter> injector(getGreeterComponent); + Greeter* greeter = injector.get<Greeter*>(); + + greeter->greet(); + + return 0; +} |