c++静态成员初始化
C++ static member initialization
我想定义class并将其注册为宏。也就是说,运行一些运行时代码来注册类型节点,以便以后可以遍历它们。
#define DUMMY_REG(name,strname)
struct name { template <class Any> name(Any&&,int i =
registerType()) {} name() {}
static int registerType() {
static int res = registerTypeInMap(strname,
makeTypeNodeFunction< name >(strname));
return res;
}
static int s_var = registerType();
};
所以,基本上我有静态s_var和初始化它,我想运行一些函数的副作用(注册一个类型)。但是,当然,我不允许内联地初始化s_var。我必须在类的边界外做。这是一个问题,因为我想嵌套这样的类型:
struct ClassHolder {
DUMMY_REG(TypeA,"Runtime_name_for_TypeA");
DUMMY_REG(TypeB,"Runtime_name_for_TypeB");
};
我不能把它写在宏的末尾,因为它仍然在类范围内。我如何确保在main执行之前运行一些静态代码来定义和注册某个类型?
我主要想避免的是多余的重复,比如一个类声明和一个宏来注册一个类型——这是多余的和愚蠢的。
这就是我现在解决它的方法(也许有人在评论中暗示了这种方法,我不确定)。基本上,我使用助手类型的模板,调用一个函数越行得到int作为副作用,然后,你需要使用int,所以它将被实例化(它可以被编译器忽略),所以我在构造函数中使用int作为默认参数。不知道这能不能扩展,希望这是跨平台的。
#define DUMMY_REG(name,strname)
struct name { template <class Any> name(Any&&,int reg = Regger::s_sideEffect) {}
TypeRegger<name> Regger;
name() {}
static int registerType() {
static int res = registerTypeInMap(strname,
makeTypeNodeFunction< name >(strname));
return res;
}
};
template <class T>
struct TypeRegger {
static const int s_sideEffect;
};
template <class T>
const int TypeRegger<T>::s_sideEffect = T::registerType();
相关文章:
- C - 初始化静态成员的方法
- 如何在运行时使用静态成员函数初始化静态成员变量
- 如何在班级中声明和初始化静态成员
- 初始化静态成员使编译工作.但是为什么
- 使用作用域内生成的指针初始化静态成员
- 初始化静态成员类(用于信号处理程序)
- 可以通过成员初始化列表初始化静态成员变量
- 如何用功能指针作为参数初始化静态成员的模板
- 运行主后,是否可以初始化静态成员变量
- 在C++中初始化静态成员
- 必须初始化静态成员
- 初始化静态成员变量值的正确位置
- 初始化静态成员函数指向同名函数的指针
- 如何初始化静态成员变量"dynamically"?
- 如何用函数的结果初始化静态成员数组
- 是否可以动态初始化静态成员数组?
- 初始化静态成员时重声明错误
- 避免在初始化静态成员时使用new()
- LNK 2001:初始化静态成员时未解析的外部符号
- 如何在c++中重写=操作符时初始化静态成员