diff --git a/rocksdb/cpp/slice_transform_wrapper.hpp b/rocksdb/cpp/slice_transform_wrapper.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..0bc310fbbb109f9fd6b4b1b19f5e499244b33122
--- /dev/null
+++ b/rocksdb/cpp/slice_transform_wrapper.hpp
@@ -0,0 +1,51 @@
+#include <string>
+#include "rocksdb/slice_transform.h"
+
+using std::string;
+using rocksdb::SliceTransform;
+using rocksdb::Slice;
+
+namespace py_rocks {
+    class SliceTransformWrapper: public SliceTransform {
+        public:
+            typedef Slice (*transform_func)(void*, const Slice&);
+            typedef bool (*in_domain_func)(void*, const Slice&);
+            typedef bool (*in_range_func)(void*, const Slice&);
+
+            SliceTransformWrapper(
+                string name,
+                void* ctx,
+                transform_func transfrom_callback,
+                in_domain_func in_domain_callback,
+                in_range_func in_range_callback):
+                    name(name),
+                    ctx(ctx),
+                    transfrom_callback(transfrom_callback),
+                    in_domain_callback(in_domain_callback),
+                    in_range_callback(in_range_callback)
+            {}
+
+            const char* Name() const {
+                return this->name.c_str();
+            }
+
+            Slice Transform(const Slice& src) const {
+                return this->transfrom_callback(this->ctx, src);
+            }
+
+            bool InDomain(const Slice& src) const {
+                return this->in_domain_callback(this->ctx, src);
+            }
+
+            bool InRange(const Slice& dst) const {
+                return this->in_range_callback(this->ctx, dst);
+            }
+
+        private:
+            string name;
+            void* ctx;
+            transform_func transfrom_callback;
+            in_domain_func in_domain_callback;
+            in_range_func in_range_callback;
+    };
+}