【发布时间】:2018-11-03 04:42:30
【问题描述】:
我有一个类Door 实现了一个方法LockCheck(),还有一个类Stove 实现了一个方法BurnerCheck()。我想要一个类House,它将Door::LockCheck 或Stove::BurnerCheck 以及给定函数的一组未知参数作为构造函数参数。 House 然后将存储函数及其参数,以便它可以在以后调用它们。例如,
auto stove = Stove();
auto stove_check = stove.BurnerCheck;
auto burner_args = std::make_tuple<bool, bool>(true, false);
auto house = House(burner_args, stove_check);
// do some other stuff...
house.check_safety(); // internally calls stove.BurnerCheck(burner_args)
House 类“看起来”应该是什么样的?
到目前为止,
template <typename ReturnType, typename... Args>
class House {
public:
House(Args... args, std::function<ReturnType(Args...)> func)
: input_args_(std::forward_as_tuple(args...)),
safety_func_(func) {}
};
private:
Args... input_args_; // Is this the correct declaration?
std::function<ReturnType(Args...)> safety_func_;
};
注意事项:
【问题讨论】:
-
我会用
std::function<void ()> safety_func_;做类似House(std::function<void ()> func) : safety_func_(func) {}之类的事情,并将其用作auto house = House([]() { stove.BurnerCheck(true, false); });。 -
@melpomene 很酷,谢谢,简洁明了。后续问题:对执行私有
safety_func_可调用对象的house.check_safety()的调用是否反映了stove在用于实例化house时的状态,还是反映了stove的当前状态? -
我很确定它需要
stove的副本。如果您希望它通过引用使用stove,则需要[&]() { ... }。
标签: c++ c++11 templates variadic-templates std-function