这是我的问题。
我有一个模板抽象类RandomVariable和纯虚函数operator()()
template<T>
class RandomVariable<T> {
public:
virtual T operator()() = 0;
/* other stuff */
protected:
T value;
}
我还有一个模板抽象类Process with pure virtual function operator()()
template<T>
class Process<T> {
public:
typedef std::pair<double, T> state;
typedef std::list<state> result_type;
virtual result_type operator()() = 0;
/* other stuff */
protected:
result_type trajectory;
}
我可以轻松编写一个返回生成路径并返回轨迹最后一个值的方法。
T GenerateTerminalValue() {
this->operator()();
return value.back().second;
};
但是,如果不是返回类型T,我的函数实际上返回了一个仿函数(理想情况下是从RandomVariable派生),并且重载的operator()生成一个路径并返回轨迹的最后一个值,这样会好得多。我最好的尝试只会导致分段错误。
这样做的好方法是什么?感谢。
答案 0 :(得分:1)
如何使用std::function
?
#include <functional>
template<typename T>
class MyClass {
public:
std::function<T()> GenerateTerminalValueFunc() {
return [this]() {
this->operator()();
return value.back().second;
};
}
...
};
更新:如果您想从RandomVariable
派生,可以尝试这样的事情:
#include <memory>
template<typename T>
class TerminalValueOp : public RandomVariable<T>
{
private:
MyClass<T>* obj_;
public:
TerminalValueOp(MyClass<T>* obj) : obj_(obj) {}
T operator()() {
obj->operator()();
return obj->value.back().second;
}
...
};
template<typename T>
class MyClass {
public:
std::shared_ptr<RandomVariable<T>> GenerateTerminalValueOp() {
return std::make_shared<TerminalValueOp<T>>(this);
}
...
};