gpt4 book ai didi

c++ - 函数签名返回抽象类

转载 作者:太空狗 更新时间:2023-10-29 20:03:19 25 4
gpt4 key购买 nike

考虑一些抽象类A:

class A
{
virtual void f() = 0;
};

假设我想声明一个返回此类的函数签名类型:

using Type = A();

鉴于此代码,gcc-4.8.2 因错误而失败

error: ‘type name’ declared as function returning an abstract class type

clang-3.3 编译得很好。

我试图用谷歌搜索这个问题,但没能找到任何有用的东西。此代码是否符合标准?如果不是,禁止声明此类签名类型的原因是什么?我在声明中看不到任何问题。

免责声明:我不会创建这种类型的实例,我只是想声明一个描述的签名。

对于那些对这种声明的有用性感兴趣的人:我有一些工厂容器在添加新工厂时使用像 Interface(Arguments...) 这样的签名来了解新工厂;实际返回的类型是根据一个单独的特征类确定的,由 Interface 参数化。

显然,我可以将 Interface 与签名分开,但看起来 不会很好 :(

最佳答案

Is this code standard-compliant?

没有。根据 C++11 [class.abstract]/3,“抽象类不得用作参数类型、函数返回类型 或显式转换类型。”

If not, what is the reasoning behind forbidding declaring such signature type?

该签名的函数不存在,因为它在返回时必须创建一个抽象类类型的对象。

I don't see any problems in just a declaration.

确实,只是声明是无害的。但这也有些无用;它不会引用任何可能存在的类型。

对于您的用例,您可以使用引用或指针作为返回类型。

关于c++ - 函数签名返回抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30100401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com