代码之家  ›  专栏  ›  技术社区  ›  drby

绑定运算符新?

  •  2
  • drby  · 技术社区  · 15 年前

    我想绑定operator new(见下面的示例)。如果构造函数没有任何参数,那么它可以正常工作,但是如果它有参数,那么我显然很难纠正绑定语法。

    #include <map>
    
    #include <boost\function.hpp>
    #include <boost\lambda\lambda.hpp>
    #include <boost\lambda\construct.hpp>
    #include <boost\lambda\bind.hpp>
    
    
    enum TypeEnum
    {
        BarType,
        BazType
    };
    
    class Foo
    {
    
    };
    
    class Bar : public Foo
    {
        public:
            Bar(int x)
            {   BarVal = x; }
    
        private:
            int barVal;
    };
    
    class Baz : public Foo
    {
        public:
            Baz(int x)
            {   bazVal = 2 * x; }
    
        private:
            int bazVal;
    };
    
    class FooFactory
    {
        public:
            FooFactory()
            {
                // How does this work?
                factoryMap[BarType] = boost::lambda::bind(boost::lambda::new_ptr<Bar>(_1));
                factoryMap[BazType] = boost::lambda::bind(boost::lambda::new_ptr<Baz>(_1));
            }
    
            Foo* getFoo(TypeEnum type, int z)
            {
                return factoryMap[type](z);
            }
    
        private:
            std::map<TypeEnum, boost::function<Foo* (int)>> factoryMap;
    };
    
    int main()
    {   
        FooFactory fooFactory;
    
        Bar *newBar = static_cast<Bar*> (fooFactory.getFoo(BarType, 10));
    
        return 0;
    }
    
    2 回复  |  直到 15 年前
        1
  •  4
  •   Rüdiger Hanke shraddha hattimare    15 年前

    应该这样做:

     factoryMap[BarType] = boost::lambda::bind(boost::lambda::new_ptr<Bar>(), boost::lambda::_1);
     factoryMap[BazType] = boost::lambda::bind(boost::lambda::new_ptr<Baz>(), boost::lambda::_1);
    
        2
  •  4
  •   Kirill V. Lyadvinsky    15 年前

    为什么不写下面的内容呢?我看不出任何使用的理由 bind 以你为例。

    factoryMap[BarType] = boost::lambda::new_ptr<Bar>();
    factoryMap[BazType] = boost::lambda::new_ptr<Baz>();