【发布时间】:2021-11-10 23:43:09
【问题描述】:
这是基类:
class Product
{
public:
static void RegisterClass() {
string b = __FUNCTION__;
};
}
这里是派生类。
class Milk: Product
{}
在主函数中我这样调用静态方法:
main(){
Milk.RegisterClass();
}
然后它将值Product::RegisterClass 写入变量b。有没有办法在静态方法中获取值Milk::RegisterClass。
我不想实例化这些类。而这个场景背后的主要目标是在某处注册Milk字符串。
【问题讨论】:
-
我觉得你运气不好。没有
Milk::RegisterClass。只有Zuul...呃Product::RegisterClass. -
您能否在此处扩展您的实际用例?正如所写的,这个例子是人为的,每一个 sn-p 都至少有一个错误。这些东西在哪里“注册”?与其让类自己注册,不如考虑一种更常见的模式(eg 类工厂),您可以使用简单的宏按名称和字符串注册所有类,而无需在类上使用任何注册函数本身。
-
静态类方法不属于类的任何实例,既不是基类也不是派生类。 C++ 不能以这种方式工作。
-
您的用例可以接受修改结构以引入 CRTP 吗?如果是这样,您可以执行以下操作:gcc.godbolt.org/z/WqK3dGezb
-
类工厂方法不需要很复杂。这是我快速敲出的一个示例来演示:godbolt.org/z/5vvdeTo3G
标签: c++ inheritance reflection static-methods