让编译器告诉哪些方法不具体而不是出错 'invalid new-expression of abstract class type'
Make the compiler tell which methods are not concrete instead of erroring 'invalid new-expression of abstract class type'
每次我向抽象 class 添加一个非具体的虚拟方法时,编译器都会对从该抽象派生的所有 classes 给出无用的错误 invalid new-expression of abstract class type '...'
class,然后我需要做git diff
来搜索我之前添加的新方法,或者在GCC的错误中寻找注释。 (添加方法和编译之间可能会有天数差异)
我能否在 C++ 中指定 class 必须是具体的(如果它不告诉 cause/missing-method)?
正在回答手头的问题:
Can I specify in C++ that a class must be concrete (and if it's not tell the cause/missing-method)?
C++ 没有明确的 抽象 或 具体 classes。这些概念隐含在语言中。 Abstract 由一个或多个纯虚拟成员函数的存在(在 class 本身或继承中)暗示,并且 concrete由于缺少此类功能。
这正是 C++ 标准定义 抽象 class (§13.4/2)
的方式
[class.abstract]
An abstract class is a class that can be used only as a base class of some other class; no objects of an abstract class can be created except as subobjects of a class derived from it. A class is abstract if it has at least one pure virtual function.
C++中没有Java的abstract
这样的关键字。
编译器错误消息是您可以捕获错误的标准位置,例如尝试实例化仍然具有纯虚拟成员函数的 class。
每次我向抽象 class 添加一个非具体的虚拟方法时,编译器都会对从该抽象派生的所有 classes 给出无用的错误 invalid new-expression of abstract class type '...'
class,然后我需要做git diff
来搜索我之前添加的新方法,或者在GCC的错误中寻找注释。 (添加方法和编译之间可能会有天数差异)
我能否在 C++ 中指定 class 必须是具体的(如果它不告诉 cause/missing-method)?
正在回答手头的问题:
Can I specify in C++ that a class must be concrete (and if it's not tell the cause/missing-method)?
C++ 没有明确的 抽象 或 具体 classes。这些概念隐含在语言中。 Abstract 由一个或多个纯虚拟成员函数的存在(在 class 本身或继承中)暗示,并且 concrete由于缺少此类功能。
这正是 C++ 标准定义 抽象 class (§13.4/2)
的方式[class.abstract]
An abstract class is a class that can be used only as a base class of some other class; no objects of an abstract class can be created except as subobjects of a class derived from it. A class is abstract if it has at least one pure virtual function.
C++中没有Java的abstract
这样的关键字。
编译器错误消息是您可以捕获错误的标准位置,例如尝试实例化仍然具有纯虚拟成员函数的 class。