Код: Выделить всё
class Task {
public:
Task(std::string prefix, std::vector children = {}) : prefix(prefix), children(children), parent(nullptr) {
}
virtual void execute(std::shared_ptr context) = 0;
virtual void resolveKeys() = 0;
virtual std::tuple createTask(
tf::Executor& executor,
tf::Taskflow& taskflow,
std::shared_ptr context,
std::shared_ptr predecessor = nullptr
) = 0;
virtual void getInputs(std::set& out) = 0;
virtual void getOutputs(std::set& out) = 0;
void setParent(Task* parent) {
this->parent = parent;
for (const auto& child : children) {
child->setParent(this);
}
}
protected:
Task* parent = nullptr;
std::string prefix;
std::vector children;
};
Код: Выделить всё
class PyTask : public nemo::Task {
public:
PyTask() : Task("", {}) {};
// Override pure virtual method
void resolveKeys() override {
PYBIND11_OVERRIDE_PURE(
void, // Return type
Task, // Parent class
resolveKeys // Name of function in C++ (must match Python)
);
}
void getInputs(std::set& out) override {
PYBIND11_OVERRIDE_PURE(
void, // Return type
Task, // Parent class
getInputs, // Name of function in C++ (must match Python)
out
);
}
void getOutputs(std::set& out) override {
PYBIND11_OVERRIDE_PURE(
void, // Return type
Task, // Parent class
getOutputs, // Name of function in C++ (must match Python)
out
);
}
// Override pure virtual method
void execute(std::shared_ptr context) override {
PYBIND11_OVERRIDE_PURE(
void, // Return type
Task, // Parent class
execute, // Name of function in C++
context // Arguments
);
}
std::tuple createTask(
tf::Executor& executor,
tf::Taskflow& taskflow,
std::shared_ptr context,
std::shared_ptr predecessor = nullptr
) override {
auto t = std::make_shared(taskflow.emplace([this, context]() {
this->execute(context);
}));
t->name(resolveName("PyTask"));
return std::make_tuple(t, t);
}
};
Код: Выделить всё
class KeepResults(pynemo.Task):
def __init__(self):
pynemo.Task.__init__(self)
self.results = []
def resolveKeys(self):
pass
def getInputs(self, out: set[str]):
return {"test_value"}
def getOutputs(self, out: set[str]):
return set()
def execute(self, context: pynemo.DataStore):
return
Я думаю, что вместо этого мне нужно сделать так, чтобы класс Python возвращал набор для методов getInputs и getOutputs, а затем перебирал метод элементы в py::set и обновите std::set, но я не уверен, как вызвать этот метод класса из С++ и как получить возвращаемое значение.< /p>
Как мне вызвать метод класса из C++ с помощью pybind11 и получить возвращаемое значение?
Подробнее здесь: https://stackoverflow.com/questions/791 ... using-pybi