小编Chr*_*art的帖子

根据模板sizeof()放置新的

这在c ++ 11中是否合法?使用最新的英特尔编译器进行编译并且似乎可以正常工作,但我只是觉得这是一个侥幸.

 class cbase
        {
        virtual void call();
        };

template<typename T> class functor : public cbase
    {
    public:
        functor(T* obj, void (T::*pfunc)())
            : _obj(obj), _pfunc(pfunc) {}

        virtual void call()
            {
            (_obj)(*_pfunc)();
            }
    private:
        T& _obj;
        void (T::*_pfunc)();            
        //edited: this is no good:
        //const static int size = sizeof(_obj) + sizeof(_pfunc);
    };

class signal
    {
    public:
        template<typename T> void connect(T& obj, void (T::*pfunc)())
            {
            _ptr = new (space) functor<T>(obj, pfunc);
            }
    private:
        cbase* _ptr;
        class _generic_object {};
        typename aligned_storage<sizeof(functor<_generic_object>), 
            alignment_of<functor<_generic_object>>::value>::type …
Run Code Online (Sandbox Code Playgroud)

c++ templates signals placement-new c++11

5
推荐指数
1
解决办法
424
查看次数

标签 统计

c++ ×1

c++11 ×1

placement-new ×1

signals ×1

templates ×1