基类中的静态方法反映派生类的名称



基类:

class Product
{
public:
static void RegisterClass() {
string b = __FUNCTION__;
};
}

,这里是派生类

class Milk: Product
{}

在main函数中我这样调用静态方法:

main(){
Milk.RegisterClass();
}

然后将值Product::RegisterClass写入变量b。是否有办法在静态方法中获得值Milk::RegisterClass?

我不想实例化类。这个场景背后的主要目标是在某处注册Milk字符串。

使用CRTP可以很好地实现OP所提供的相当受限的场景。

正如在评论中指出的那样,type_info::name()充满了不确定性,因此更好的方法是显式地声明要使用的字符串:

#include <string>
#include <string_view>
#include <iostream>
template<typename CRTP>
class Product
{
public:
static void RegisterClass() {
std::string b{CRTP::product_name};
std::cout << b << "n";
};
};
class Milk : public Product<Milk> {
public:
static constexpr std::string_view product_name{"Milk"};
};
int main() {
Milk::RegisterClass();
}

相关内容

  • 没有找到相关文章

最新更新