如何概括/生成布尔代理实现?

时间:2018-06-06 14:04:38

标签: boolean wrapper idiomatic proxy-object

我正在处理某个包装对象,对某些东西来说。我们打电话给这个班级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问题,所以我提供了一个或多或少的充分动机。

0 个答案:

没有答案