在最初编写为@ 2001的大型C++代码库中,单例类被大量使用,其定义如下:
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,我得到了:
$ 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:
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给出了错误:
$ g++ -std=c++98 -Isonim/MRFP/inc -c /tmp/ts.cpp
/tmp/ts.cpp:15: error: too few template-parameter-lists发布于 2021-08-19 15:24:41
模板专门化需要template<>。
#define INIT_SINGLETON(T) \
template<> \
T * Singleton<T>::_instance = ((T*)0UL)编译示例
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);关于更新后的问题:
template<>
ab_s * Singleton<ab_s> :: _instance = NULL; https://stackoverflow.com/questions/68850395
复制相似问题