lis*_*rus 3 c++ abstract-class signature language-lawyer
考虑一些抽象类A:
class A
{
virtual void f() = 0;
};
Run Code Online (Sandbox Code Playgroud)
假设我希望声明一个返回此类的函数签名类型:
using Type = A();
Run Code Online (Sandbox Code Playgroud)
鉴于此代码,gcc-4.8.2错误导致错误
error: ‘type name’ declared as function returning an abstract class type
Run Code Online (Sandbox Code Playgroud)
clang-3.3 编译得很好.
我试图谷歌这个问题,但没有找到任何有用的东西.这段代码是否符合标准?如果没有,那么禁止宣布这种签名类型的原因是什么?我只是在声明中看不到任何问题.
免责声明:我不打算创建这种类型的实例,我只想宣布描述的签名.
对于那些对这种声明有用的人感兴趣:我有一些工厂容器使用签名,就像Interface(Arguments...)添加新工厂来了解新工厂一样; 实际返回的类型是根据一个单独的traits类确定的,参数由Interface.
显然,我可以将其Interface与签名分开,但它看起来不会很好:(
这段代码是否符合标准?
根据C++ 11 [class.abstract]/3,"抽象类不能用作参数类型,作为函数返回类型,或作为显式转换的类型."
如果没有,那么禁止宣布这种签名类型的原因是什么?
该签名的功能不可能存在,因为它必须在返回时创建抽象类类型的对象.
我只是在声明中看不到任何问题.
实际上,只是声明是无害的.但它也有点无用; 它不会指任何可能存在的类型.
对于您的用例,您可以使用引用或指针作为返回类型.
| 归档时间: |
|
| 查看次数: |
191 次 |
| 最近记录: |