我正在处理某个包装对象,对某些东西来说。我们打电话给这个班级Foo
。现在,Foo有一个提供C风格API的库,其中包括功能:
foo_status_type fooSetBar(int foo_id, bar_value_type new_bar_value);
foo_status_type fooGetBar(int foo_id, bar_value_type* bar_value);
目前,我基本上有:
class Foo {
const int id_;
bar() const {
bar_value_type bv{};
auto status = fooGetBar(id_, &bv);
// error handling
return bv;
}
void bar(bar_value_type v) {
auto status = fooSetBar(id_, v);
// error handling
}
}
问题是,bar_value_type
实际上只有两个值。所以,我已经决定要实现一个布尔代理对象,这样我才能写出:
if (my_foo.bar and other_condition) { do_whatever(); }
和
my_foo.bar = false;
并为此工作。现在,显然我可以这样做,但实际上有多种bar
具有这种行为,所以我想写一个"泛型布尔代理"。这也不是什么大问题 -
template<typename Getter, typename Setter>
class gbp {
gbp(const Getter& getter, const Setter& setter) : getter_(getter), setter_(setter) { }
// etc. etc.
protected:
const Getter const& getter_;
const Setter const& setter_;
}
但我想避免存储地址。这可以实现吗?如果没有 - 我是不是想做错误的事情&#34;这里吗?
对于长篇描述感到抱歉 - 我不希望这是一个XY问题,所以我提供了一个或多或少的充分动机。