Yes, using the placement new operator was my initial idea. But as far as I
investigated this technique, it is not very safe, because of alignment
issues. I am curious about the role of the 'double align' member and the
union. Is this to prevent a zero-sized array in case sizeof(Unlocker) == 0 ?
Thanks
Alex
12 март 2012, понеделник 16:20:15 UTC+2, Shezan Baig написа:
>
> you could conditionally construct it like:
>
> class ConditionalUnlocker {
> typedef v8::Unlocker RealUnlocker;
>
> union {
> char unlocker[sizeof(RealUnlocker)];
> double align;
> };
> bool istrue;
>
> public:
> ConditionalUnlocker(bool condition)
> : istrue(condition)
> {
> if (istrue) {
> new (unlocker) RealUnlocker(); // construct it within the
> stack-allocated 'unlocker'
> }
> }
>
> ~ConditonalUnlocker()
> {
> if (istrue) {
> RealUnlocker& real = *(RealUnlocker*)unlocker;
> real.~RealUnlocker(); // destruct it
> }
> }
> };
>
>
> (no guarantees being made about the portability of this class etc)
>
>
>
> 2012/3/12 avasilev <[email protected]>
>
>> Hi Stephan,
>> Thanks
>> Unfortunately this will do the job only if the flag is known at compile
>> time. What I need is to be able to switch this at runtime.
>> Thanks for the response.
>> Best regards
>> Alex
>>
>> 12 март 2012, понеделник 14:25:56 UTC+2, Stephan Beal написа:
>>
>>> On Mon, Mar 12, 2012 at 12:37 PM, avasilev <[email protected]> wrote:
>>>
>>>> Unlocker classes? My use case is a conditional auto-unlocker object,
>>>> that may or may not unlock v8, depending on a global setting, so I
>>>>
>>>
>>> Here's a template which does that:
>>>
>>> /**
>>> A sentry class which instantiates a v8::Unlocker
>>> if the boolean value is true or is a no-op if it is false.
>>> */
>>> template <bool> struct V8Unlocker {};
>>>
>>> /**
>>> Equivalent to v8::Unlocker.
>>> */
>>> template <>
>>> struct V8Unlocker<true> : v8::Unlocker
>>> {
>>> };
>>>
>>> --
>>> ----- stephan beal
>>> http://wanderinghorse.net/**home/stephan/<http://wanderinghorse.net/home/stephan/>
>>> http://gplus.to/sgbeal
>>>
>>>
>> 12 март 2012, понеделник 14:25:56 UTC+2, Stephan Beal написа:
>>
>>> On Mon, Mar 12, 2012 at 12:37 PM, avasilev <[email protected]> wrote:
>>>
>>>> Unlocker classes? My use case is a conditional auto-unlocker object,
>>>> that may or may not unlock v8, depending on a global setting, so I
>>>>
>>>
>>> Here's a template which does that:
>>>
>>> /**
>>> A sentry class which instantiates a v8::Unlocker
>>> if the boolean value is true or is a no-op if it is false.
>>> */
>>> template <bool> struct V8Unlocker {};
>>>
>>> /**
>>> Equivalent to v8::Unlocker.
>>> */
>>> template <>
>>> struct V8Unlocker<true> : v8::Unlocker
>>> {
>>> };
>>>
>>> --
>>> ----- stephan beal
>>> http://wanderinghorse.net/**home/stephan/<http://wanderinghorse.net/home/stephan/>
>>> http://gplus.to/sgbeal
>>>
>>>
>> 12 март 2012, понеделник 14:25:56 UTC+2, Stephan Beal написа:
>>
>>> On Mon, Mar 12, 2012 at 12:37 PM, avasilev <[email protected]> wrote:
>>>
>>>> Unlocker classes? My use case is a conditional auto-unlocker object,
>>>> that may or may not unlock v8, depending on a global setting, so I
>>>>
>>>
>>> Here's a template which does that:
>>>
>>> /**
>>> A sentry class which instantiates a v8::Unlocker
>>> if the boolean value is true or is a no-op if it is false.
>>> */
>>> template <bool> struct V8Unlocker {};
>>>
>>> /**
>>> Equivalent to v8::Unlocker.
>>> */
>>> template <>
>>> struct V8Unlocker<true> : v8::Unlocker
>>> {
>>> };
>>>
>>> --
>>> ----- stephan beal
>>> http://wanderinghorse.net/**home/stephan/<http://wanderinghorse.net/home/stephan/>
>>> http://gplus.to/sgbeal
>>>
>>>
>> 12 март 2012, понеделник 14:25:56 UTC+2, Stephan Beal написа:
>>
>>> On Mon, Mar 12, 2012 at 12:37 PM, avasilev <[email protected]> wrote:
>>>
>>>> Unlocker classes? My use case is a conditional auto-unlocker object,
>>>> that may or may not unlock v8, depending on a global setting, so I
>>>>
>>>
>>> Here's a template which does that:
>>>
>>> /**
>>> A sentry class which instantiates a v8::Unlocker
>>> if the boolean value is true or is a no-op if it is false.
>>> */
>>> template <bool> struct V8Unlocker {};
>>>
>>> /**
>>> Equivalent to v8::Unlocker.
>>> */
>>> template <>
>>> struct V8Unlocker<true> : v8::Unlocker
>>> {
>>> };
>>>
>>> --
>>> ----- stephan beal
>>> http://wanderinghorse.net/**home/stephan/<http://wanderinghorse.net/home/stephan/>
>>> http://gplus.to/sgbeal
>>>
>>>
>> 12 март 2012, понеделник 14:25:56 UTC+2, Stephan Beal написа:
>>
>>> On Mon, Mar 12, 2012 at 12:37 PM, avasilev <[email protected]> wrote:
>>>
>>>> Unlocker classes? My use case is a conditional auto-unlocker object,
>>>> that may or may not unlock v8, depending on a global setting, so I
>>>>
>>>
>>> Here's a template which does that:
>>>
>>> /**
>>> A sentry class which instantiates a v8::Unlocker
>>> if the boolean value is true or is a no-op if it is false.
>>> */
>>> template <bool> struct V8Unlocker {};
>>>
>>> /**
>>> Equivalent to v8::Unlocker.
>>> */
>>> template <>
>>> struct V8Unlocker<true> : v8::Unlocker
>>> {
>>> };
>>>
>>> --
>>> ----- stephan beal
>>> http://wanderinghorse.net/**home/stephan/<http://wanderinghorse.net/home/stephan/>
>>> http://gplus.to/sgbeal
>>>
>>> --
>> v8-users mailing list
>> [email protected]
>> http://groups.google.com/group/v8-users
>>
>
>
--
v8-users mailing list
[email protected]
http://groups.google.com/group/v8-users