aboutsummaryrefslogtreecommitdiff
path: root/src/example/proxy.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/example/proxy.cpp')
-rw-r--r--src/example/proxy.cpp47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/example/proxy.cpp b/src/example/proxy.cpp
new file mode 100644
index 0000000..7e2efa5
--- /dev/null
+++ b/src/example/proxy.cpp
@@ -0,0 +1,47 @@
+/** \file
+ *
+ * Standalone example for usage of the proxy type
+ */
+
+#include <crepe/api/Config.h>
+#include <crepe/util/log.h>
+#include <crepe/Proxy.h>
+
+using namespace std;
+using namespace crepe;
+using namespace crepe::util;
+
+template <typename T>
+class MyProxyHandler : public ProxyHandler<T> {
+public:
+ virtual void set(const T & val) {
+ dbg_logf("set %s", to_string(val).c_str());
+ this->val = val;
+ }
+
+ virtual const T & get() {
+ dbg_logf("get %s", to_string(this->val).c_str());
+ return this->val;
+ }
+
+private:
+ T val = 0;
+};
+
+void test_ro(const int & val) { }
+void test_rw(int & val) { }
+
+int main() {
+ auto & cfg = api::Config::get_instance();
+ cfg.log.level = util::LogLevel::DEBUG;
+
+ Proxy<int> val(make_unique<MyProxyHandler<int>>());
+
+ val = 54;
+
+ test_ro(val); // this is allowed
+ // test_rw(val); // this should throw a compile error
+
+ return 0;
+}
+