首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++98模板类静态成员初始化?

C++98模板类静态成员初始化?
EN

Stack Overflow用户
提问于 2021-08-19 15:11:19
回答 1查看 73关注 0票数 1

在最初编写为@ 2001的大型C++代码库中,单例类被大量使用,其定义如下:

代码语言:javascript
复制
   template <class T> 
   struct Singleton 
   { T *Instance() { return _instance; }
   ... 
     static T *_instance;
   }; 
   #define INIT_SINGLETON(T) \
    T * Singleton <T>::_instance = ((T*)0UL)

现在,在测试文件中使用INIT_SINGLETON(structX)并使用默认的c++98标准时,我必须使用GCC 4.7.7,我得到了:

代码语言:javascript
复制
   $ g++ -std=c++98 -c /tmp/ts.cpp 
   /tmp/ts.cpp:11: error: too few template-parameter-lists

这段代码最后一次在Linux RHEL3上用GCC 3.4.3编译得很好--我正试着把它移植到RHEL6 (GCC 4.4.4 / 4.7.7)。

我使用C++98代码已经有一段时间了,虽然我从@ 1994开始就使用了C++,但今天我似乎不能理解这个问题。

有没有人能解释一下为什么会发生这个错误,以及如何避免?

响应S.M.&NathanOliver的请求,这是/tmp/ts.cpp:

代码语言:javascript
复制
    template <class T> 
    struct Singleton 
    { T * Instance() { return _instance; } 
      T * _instance; 
    }; 

    struct ab_s { int a, b; }; 

    typedef Singleton<ab_s> S_ab_s_t; 

    ab_s* f(S_ab_s_t sa)
    { return sa.Instance(); 
    }

    ab_s * Singleton<ab_s> :: _instance = NULL; 

GCC 4.7.7给出了错误:

代码语言:javascript
复制
    $ g++ -std=c++98 -Isonim/MRFP/inc -c /tmp/ts.cpp  
    /tmp/ts.cpp:15: error: too few template-parameter-lists
EN

回答 1

Stack Overflow用户

发布于 2021-08-19 15:24:41

模板专门化需要template<>。

代码语言:javascript
复制
#define INIT_SINGLETON(T) \
    template<> \
    T * Singleton<T>::_instance = ((T*)0UL)

编译示例

代码语言:javascript
复制
template <class T> 
struct Singleton 
{
  T *Instance() { return _instance; }
  static T *_instance;
}; 

#define INIT_SINGLETON(T) \
  template<> \
  T * Singleton<T>::_instance = ((T*)0UL)

struct structX{};

INIT_SINGLETON(structX);

关于更新后的问题:

代码语言:javascript
复制
template<>
ab_s * Singleton<ab_s> :: _instance = NULL; 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68850395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档