mysqlpp 记录的声明表结构的方法不能在 C 头文件中使用



我使用mysql++ (Tangentsoft)多年了(在c++中),由于一些大规模插入,我试图切换到他们建议的方式,使用他们的(!!)命令大小控制的方式来做massinserts:一个将迭代器作为数据输入的插入函数。

专用SQL结构

我的问题是,(大多数)宏sql_create_#除了大量的其他事情之外,创建两个静态类成员(命名为"names")和"table"没有声明,但已经实现. 只要生成的结构只用于一个源代码文件(例如a *.cpp),这就可以工作。但是当我需要在头文件中生成结构时,它们被#include'多次,当链接实例化多次时,上述两个实例化将会报错。…完全正确。

是否有办法改变mysqlpp的宏的行为?"sql_create_ #";不实例化除了之外的任何东西,只声明

所需的结构?我想到的唯一方法是获取sql_create_#宏的扩展并手动修改该代码以适合多次使用(例如在我的头文件中)。

下面是两个生成的代码片段(从一个4列表的~540行的宏展开中),这会导致问题(包括难看的缩进:-/),这些问题应该被声明为外部的,并由单独的宏来实现。

int compare (const gridData &other) const 
{return sql_compare_gridData<mysqlpp::sql_dummy>(*this,other);}     static const char* names[];
...
static void table(const char* t) { table_ = t; }
private:
static const char* table_;
const char* table_override_;
};

我是否以某种方式误用了这些宏,或者这是mysql++框架中的错误?(注释:所有的例子都是一个文件的例子,这个限制没有影响)

链接器标志--allow-multiple-definition将会做到这一点,忽略重复的符号,只使用第一个。应该保证所有副本都是相同的实现,并且没有差异(例如在版本控制或其他方面)

相关内容

  • 没有找到相关文章