Meh*_*dad 3 c++ singleton static-members visual-c++
我显然知道错误是:
错误C2864:
Singleton<T>::p:
只有静态常量整型数据成员可以在类中被初始化
但为什么呢?(即,是否存在技术上的原因,为什么不允许它?)
这是特定于编译器的行为还是由标准强制执行?
它似乎在全球范围内很好,为什么不在课堂范围内呢?
另外,解决这个问题的正确方法是什么?
template<typename T>
struct Singleton
{
static T *p = 0; // Error C2864
static T *getInstance() { /*...*/ return p; }
};
Run Code Online (Sandbox Code Playgroud)
这是标准行为.只有静态const积分成员才能在没有正确定义的情况下进行初始化.需要在某处定义所有其他类型,并在定义时编写初始化:
template<typename T>
struct Singleton {
static T *p;
static T *getInstance() { /*...*/ return p; }
};
template<typename T>
T *Singleton<T>::p = 0;
Run Code Online (Sandbox Code Playgroud)
必须在某处定义对象.如果在类中定义它们,则在头文件中定义它们,并为包含它的每个编译单元获取不同的对象.这对于const整数类型是放宽的,如果你没有定义它们,那么编译器只是用它的文字值替换它.如果没有提供定义,那么取这样的静态const积分的地址仍会导致链接器错误.
| 归档时间: |
|
| 查看次数: |
1529 次 |
| 最近记录: |