我需要在C ++中创建描述SQL表的定义列表。目前我正在这样做,因为它实际上不需要是一个真正的对象,并且以这种方式初始化是相当方便的:
namespace Table_name
{
static ColumnList Cols("Table_name");
static const Column Id ("Id INTEGER PRIMARY KEY", Cols);
static const Column Col_name ("Col_name TEXT", Cols);
}
(外部名称空间,省略using
等)
我将Cols传递给每个构造函数,以便每个列都在列表中注册。我将其用作Table_name::Col_name
或Table_name::Cols
来获取列表。目前它工作得很好,但我意识到由于多线程访问最终可能发生的静态变量,可能会出现一些问题。或者那些问题只与局部静态变量有关?
如何重新设置它以使其安全/更好,并且仍然具有类似方便的定义和对列变量及其列表的访问权限?我希望每个列都在一个地方定义,因此枚举,“正常”变量等不起作用。另外,您认为在这种情况下使用像DEF_COL(Col_name, "...");
这样的宏是否合适?感谢。
答案 0 :(得分:1)
你可以使用单例来确保你没有任何与静态初始化的未定义顺序相关的问题
您也可以检查MySql++库以检查它们如何解决表结构定义问题
答案 1 :(得分:1)
您可以在对象内提供必要的同步;但是,除非您的表定义在运行时实际发生变化,否则它们将自动为MT安全。