summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libadhocutil/factory.h25
-rw-r--r--libadhocutil/scopeExit.h2
2 files changed, 26 insertions, 1 deletions
diff --git a/libadhocutil/factory.h b/libadhocutil/factory.h
index 28fce62..f1998a7 100644
--- a/libadhocutil/factory.h
+++ b/libadhocutil/factory.h
@@ -5,24 +5,47 @@
#include "visibility.h"
namespace AdHoc {
+ /**
+ * Base class for factories creating instances of Base.
+ */
template <typename Base, typename ... Params>
class DLL_PUBLIC Factory {
public:
virtual ~Factory() = 0;
- virtual Base * create(const Params & ...) const = 0;
+ /**
+ * Create a new instance of Base, overridden in a subclass to construct a new specific class.
+ * @param p The parameters passed to Impl constructor.
+ */
+ virtual Base * create(const Params & ... p) const = 0;
+ /**
+ * A factory for a concrete implementation of Base
+ */
template <typename Impl, typename _ = Factory<Base, Params...>>
class DLL_PUBLIC For : public _
{
public:
+ /**
+ * Create a new instance of Base implemented in Impl.
+ * @param p The parameters passed to Impl constructor.
+ */
Base * create(const Params & ... p) const override
{
return new Impl(p...);
}
};
+ /**
+ * Helper to get the factory for a specific implementation.
+ * @param name The name of the implementation.
+ */
static const Factory * get(const std::string & name);
+ /**
+ * Helper to create a new instance from a specific factory.
+ * @param name The name of the implementation.
+ * @param p The parameters to pass to the constructor.
+ */
static Base * create(const std::string & name, const Params & ... p);
};
}
diff --git a/libadhocutil/scopeExit.h b/libadhocutil/scopeExit.h
index 17618a4..73c2ca2 100644
--- a/libadhocutil/scopeExit.h
+++ b/libadhocutil/scopeExit.h
@@ -26,7 +26,9 @@ class DLL_PUBLIC ScopeExit {
ScopeExit(const Event & pre, const Event & success = Event(), const Event & failure = Event(), const Event & post = Event());
~ScopeExit();
+ /// Copying construction is disabled
ScopeExit(const ScopeExit &) = delete;
+ /// Assignment is disabled
void operator=(const ScopeExit &) = delete;
/// @cond