代码之家  ›  专栏  ›  技术社区  ›  ereOn

我的模板类的多个定义

  •  2
  • ereOn  · 技术社区  · 14 年前

    在我的图书馆里,我有几个 initialize() cleanup() 函数,它依赖于不同的模块。

    为了使这部分更安全地使用,我决定遵循RAII规则并建立一个 Initializer 模板类 ,取两个函数作为参数:

    // 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

    我能做些什么来解决这个问题?

    3 回复  |  直到 14 年前
        1
  •  3
  •   CB Bailey    14 年前
    namespace xml
    {       
      void initialize();
      void cleanup();
    
      typename ::Initializer<&initialize, &cleanup> Initializer;
    }
    

    typename 这里是非法的,只允许在模板定义中使用。你的意思是 typedef !

    namespace xml
    {       
      void initialize();
      void cleanup();
    
      typedef ::Initializer<&initialize, &cleanup> Initializer;
    }
    
        2
  •  2
  •   Chubsdad    14 年前
    typename ::Initializer<&initialize, &cleanup> Initializer;
    

    这是一个显式的实例化。请把它放在一个而且只有一个翻译单元里

        3
  •  0
  •   Pardeep    14 年前

    在这些宏中包含xml.hpp代码

    #ifndef XML_HPP
    #define XML_HPP
    
    // Include code here
    
    #endif