Re: Is finalizing a virtual method possible in C++?
On 2008-02-22 08:05:28 -0500, "Alf P. Steinbach" <alfps@start.no> said:
> * Kira Yamato:
>> On 2008-02-22 07:35:34 -0500, Pavel Lepin <p.lepin@ctncorp.com> said:
>>
>>>
>>> Kira Yamato <kirakun@earthlink.net> wrote in
>>> <2008022206570016807-kirakun@earthlinknet>:
>>>> So, I don't want to say too hestantly that it is
>>>> impossible to simulate the finalizing of virtual methods
>>>> and classes in C++.
>>>>
>>>> Hence, I rather turn to the experts and ask if anyone
>>>> knows if it is possible to simulate them in any way?
>>>
>>> This is a FAQ.
>>>
>>> <http://www.parashift.com/c++-faq-lite/>
>>
>> Yes. Thanks. But the FAQ does not say that finalizing method is
>> impossible. If in fact it did, then the answer is found. Instead, it
>> just proposes a "solution."
>>
>> So let me try asking differently, has anyone gotten further with a
>> better solution than merely stating a comment?
>
> There should be no reason to finalize a member function in C++.
>
> But if you absolutely must it's not that difficult.
>
> class Base
> {
> friend class Derived;
> private:
> struct OverrideTag {};
> public:
> virtual void foo( OverrideTag = OverrideTag() ) = 0;
> };
>
> class Derived: public Base
> {
> public:
> virtual void foo( OverrideTag = OverrideTag() ) {}
> };
>
> class FurtherDerived: public Derived
> {
> public:
> // Nix njet.
> // virtual void foo( OverrideTag = OverrideTag() ) {}
> };
Neat. So, it uses a similar trick as the final class method. You
should email the owner of the C++ FAQ and propose this as another
possible solution.
>
> [...]
> However, chances are that if you do something like this then you're
> thinking in Java, not in C++, using ideas that don't make sense in C++.
I'm not disagreeing with you here, but I like to hear the reason why
you feel that this is not necessary (or maybe even wrong) in C++ to
finalize methods.
--
// kira
|