是否可以识别虚拟函数的不良压倒性? [重复]

问题描述 投票:0回答:1

例如:

struct A
{
    virtual void go() { };
};

struct B : public A
{
    void go() { };
};
函数的implicriqu topriond可能是不可取的,因为

go

B::go()
隐藏或覆盖了struct
A
的相同函数,甚至可能是在struct
A
override
中不存在的新函数,这是无法识别的。 。 
go()
当您想要理想的虚拟函数覆盖时,C ++ 11的功能很有用,但是就我而言,它是不受欢迎的,我不想覆盖函数,这意味着,如果我知道有一个虚拟的功能函数i不会在struct
override
.
中它
我想要的是类似于[[check_names]]属性提案
不批准C ++ 11的东西。 C ++是否具有语言功能?

通过方式,编译器(例如GCC和VC ++)是否可以选择警告(如果不可用的话,警告就足够了!),如果发生虚拟函数的隐式压倒式?如果有的话,您可以提供GCC的示例吗? eDit

:我不是在谈论力量或语言功能,我想要的只是一个警告或任何使我能够识别不受欢迎的压倒的东西。

eDit

:可以选择?它可以是以下代码:

B 或: struct A { virtual void go() { }; }; struct B : public A { virtual void go() { }; };

使用属性。
	

我猜你可以使用标签,

struct A
{
    virtual void go() { };
};

struct B : public A
{
    void go() override { };
};

在池中,您将类型的默认限制参数添加为

#include <iostream> #include <memory> using namespace std; struct no_override_tag {}; struct A { virtual void go() { cout <<"A::go" << endl;}; }; struct B : public A { void go(no_override_tag={}) { cout << "B::go" <<endl; }; }; int main() { unique_ptr<A> upA(new B); upA->go(); // no override, calls `A::go()` instead of `B::go()` }
c++ overriding virtual-functions
1个回答
1
投票
no_override_tag

的签名不同,无论您在

B::go()
中声明什么。不是超级优雅,但它可以奏效,但是我不知道你为什么真的想这样做。
    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.