gpt4 book ai didi

c++ - 在全局范围内调用静态方法

转载 作者:搜寻专家 更新时间:2023-10-31 00:13:49 25 4
gpt4 key购买 nike

我有一个存储类型集合的类。此类型由其他类使用来自第一个类的静态方法注册。

这是一些代码:

在文件classA.h中

class A {
static void RegisterType(std::string name, bool (*checkType)(Json::Value toCheck));
}

在文件classB.h中

class B {
static bool CheckType(Json::Value toCheck);
}

在文件classB.cpp中

// In global scope
A::RegisterType("B", &B::CheckType);

当我在 classB.cpp 中执行此操作时,我的编译器 (Visual Studio 2010) 认为我想重新声明 A::RegisterType() 函数。

我尝试将 A::RegisterType() 的返回类型从 void 更改为 bool。然后将返回值赋值给 classB.cpp 中的一个变量:

// In global scope
bool tmp = A::RegisterType("B", &B::CheckType);

这种方式确实有效,但我在全局范围内添加了一个变量,但我不想这样做。

如何从全局范围调用 A::RegisterType() 而不将其结果分配给变量?

另一个问题是如何从 classB.cpp 注册“B”类型?

最佳答案

C++ 中没有“独立的”函数调用:您可以从另一个静态方法(例如,从 main())调用 RegisterType()

解决方法是模仿静态构造函数:

struct StaticInit
{
StaticInit()
{
A::RegisterType("B", &B::CheckType);
}
};

class B
{
// ...
static StaticInit si; // Will force the static initialization
};

关于c++ - 在全局范围内调用静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25660008/

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