在我的库中,我有几个initialize()
和cleanup()
函数,它们依赖于不同的模块。
为了使该部分更安全地使用,我决定遵循RAII规则,并建立了一个Initializer
模板类ojit_rstrong,该类使用两个函数作为参数:// initializer.hpp (include guards omitted)
template <void initialize(), void cleanup()>
class Initializer
{
// Does something, but that's not relevant
};
现在,在我的xml.hpp
文件中,我有这个:// xml.hpp (include guards omitted)
namespace xml
{
void initialize();
void cleanup();
typename ::Initializer<&initialize, &cleanup> Initializer;
}
这样编译可以很好,但是链接失败,因为几个文件包含xml.hpp
,而gcc抱怨xml::Initializer
有多个定义。
我该怎么解决?
最佳答案
namespace xml
{
void initialize();
void cleanup();
typename ::Initializer<&initialize, &cleanup> Initializer;
}
typename
在这里是非法的,仅在模板定义中允许。您的意思是typedef
!namespace xml
{
void initialize();
void cleanup();
typedef ::Initializer<&initialize, &cleanup> Initializer;
}
关于c++ - 我的模板类的多个定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3837637/