@@ -64,6 +64,17 @@ class ExecutionContext;
6464 */
6565class OperatorBase {
6666 public:
67+ using VarNameMap = std::map<std::string, std::vector<std::string>>;
68+
69+ OperatorBase () = default ;
70+ OperatorBase (const std::string& type, const VarNameMap& inputs,
71+ const VarNameMap& outputs, const AttributeMap& attrs)
72+ : type_(type), inputs_(inputs), outputs_(outputs), attrs_(attrs) {}
73+
74+ OperatorBase (const OperatorBase& o) = delete ;
75+ OperatorBase& operator =(const OperatorBase& o) = delete ;
76+ OperatorBase (OperatorBase&& o) = delete ;
77+
6778 virtual ~OperatorBase () {}
6879
6980 template <typename T>
@@ -151,6 +162,15 @@ class OperatorBase {
151162 AttributeMap attrs_;
152163};
153164
165+ #define DEFINE_OPERATOR_CTOR (Class, ParentClass ) \
166+ public: \
167+ Class () : ParentClass() { /* TODO(yi): This constructor is to be removed. */ \
168+ } \
169+ Class (const std::string& type, const VarNameMap& inputs, \
170+ const VarNameMap& outputs, \
171+ const paddle::framework::AttributeMap& attrs) \
172+ : ParentClass(type, inputs, outputs, attrs) {}
173+
154174class InferShapeContext {
155175 public:
156176 InferShapeContext (const OperatorBase& op, const Scope& scope)
@@ -290,6 +310,8 @@ class OpKernel {
290310
291311class OperatorWithKernel : public OperatorBase {
292312 public:
313+ DEFINE_OPERATOR_CTOR (OperatorWithKernel, OperatorBase)
314+
293315 struct OpKernelKey {
294316 platform::Place place_;
295317
0 commit comments