Date: Fri, 10 Nov 2023 08:07:51 +0000
On 10 November 2023 04:40:23 GMT, Scott Michaud via Std-Proposals <std-proposals_at_[hidden]> wrote:
>So the issue is that you want inheritance, but you don't want a vtable to
>be generated for your runtime code because it won't have inheritance there?
>
>Sounds like your interface should be a template, kind-of like how
>std::allocator works. You don't need virtual dispatch... just the types to
>line up.
>
>This has other trade-offs, but might suit your needs better than virtual
>function calls.
I commonly use this pattern together with extern templates to curb some of those other tradeoffs.
>I could also be completely misunderstanding, of course.
>
>On Thu, Nov 9, 2023 at 8:22 PM Smith, Jim via Std-Proposals <
>std-proposals_at_[hidden]> wrote:
>
>> Hi All,
>>
>> Test-driven development (TDD) is my de facto standard for writing
>> software. On some projects I can't use TDD because interfaces introduce
>> VTBL operation into the code. For me this is a serious issue.
>>
>> I've always used C++ interfaces i.e., classes with all pure virtual
>> functions for TDD, especially when implementing a design patterns like
>> Factory.
>>
>> I'm proposing a compiler option that will turn a virtual call through an
>> interface, to a direct call on the object. For example,
>>
>> interface* i = Factory::Create();
>>
>> i->someVirtualFunc();
>>
>> In cases where single inheritance is used i->someVirtualFunc() would be
>> optimized to a direct call on the object without any VTBL operation.
>>
>> This way the TDD code can use the standard VTBL operations, and in
>> production builds a flag can be set to optimize it away. I can't do this
>> myself without mentioning the concrete type created by the factory but the
>> compiler can make the optimization.
>>
>>
>> --James S.
>>
>>
>> --
>> Std-Proposals mailing list
>> Std-Proposals_at_[hidden]
>> https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals
>>
>So the issue is that you want inheritance, but you don't want a vtable to
>be generated for your runtime code because it won't have inheritance there?
>
>Sounds like your interface should be a template, kind-of like how
>std::allocator works. You don't need virtual dispatch... just the types to
>line up.
>
>This has other trade-offs, but might suit your needs better than virtual
>function calls.
I commonly use this pattern together with extern templates to curb some of those other tradeoffs.
>I could also be completely misunderstanding, of course.
>
>On Thu, Nov 9, 2023 at 8:22 PM Smith, Jim via Std-Proposals <
>std-proposals_at_[hidden]> wrote:
>
>> Hi All,
>>
>> Test-driven development (TDD) is my de facto standard for writing
>> software. On some projects I can't use TDD because interfaces introduce
>> VTBL operation into the code. For me this is a serious issue.
>>
>> I've always used C++ interfaces i.e., classes with all pure virtual
>> functions for TDD, especially when implementing a design patterns like
>> Factory.
>>
>> I'm proposing a compiler option that will turn a virtual call through an
>> interface, to a direct call on the object. For example,
>>
>> interface* i = Factory::Create();
>>
>> i->someVirtualFunc();
>>
>> In cases where single inheritance is used i->someVirtualFunc() would be
>> optimized to a direct call on the object without any VTBL operation.
>>
>> This way the TDD code can use the standard VTBL operations, and in
>> production builds a flag can be set to optimize it away. I can't do this
>> myself without mentioning the concrete type created by the factory but the
>> compiler can make the optimization.
>>
>>
>> --James S.
>>
>>
>> --
>> Std-Proposals mailing list
>> Std-Proposals_at_[hidden]
>> https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals
>>
Received on 2023-11-10 08:07:56