C++ C++;具有自身静态常量成员实例的模板类

C++ C++;具有自身静态常量成员实例的模板类,c++,templates,static,initialization,constants,C++,Templates,Static,Initialization,Constants,模板类的静态常量成员应初始化如下: template <typename T> class TypeA{ public: static const int INSTANCE = 1; }; 模板 A类{ 公众: 静态常量int实例=1; }; 如果我们想要类TypeA的实例,而不是int,那么正确的语法是什么 例如: #包括 模板 A类{ 公众: T-mData; TypeA(T数据):mData(数据){} 静态常量TypeA实例=TypeA(1); }; int mai

模板类的静态常量成员应初始化如下:

template <typename T>
class TypeA{
public:
   static const int INSTANCE = 1;
};
模板
A类{
公众:
静态常量int实例=1;
};
如果我们想要类TypeA的实例,而不是int,那么正确的语法是什么

例如:

#包括
模板
A类{
公众:
T-mData;
TypeA(T数据):mData(数据){}
静态常量TypeA实例=TypeA(1);
};
int main(int argc,字符**argv){

std::cout只需按照编译器提供的说明进行操作:

main.cpp | 9 |错误:不完整类型的静态数据成员“const TypeA TypeA::INSTANCE”的类内初始化|

无法初始化尚未完全声明的类型。因此,必须将初始化移出类声明:

#include <iostream>

template <typename T>
class TypeA{
public:
    T mData;
    TypeA(T data) : mData(data){}

    static const TypeA<T> INSTANCE;
};

template <typename T>
const TypeA<T> TypeA<T>::INSTANCE = TypeA<T>(1);

int main(int argc, char **argv){
    std::cout << TypeA<int>::INSTANCE.mData << std::endl;
}
#包括
模板
A类{
公众:
T-mData;
TypeA(T数据):mData(数据){}
静态常量类型实例;
};
模板
const TypeA TypeA::INSTANCE=TypeA(1);
int main(int argc,字符**argv){

std::cout不能在类内初始化实例。需要稍后再初始化

#include <iostream>
template <typename T>
class TypeA{
public:
    T mData;
    TypeA(T data) : mData(data){}
    static const TypeA<T> INSTANCE;
};
template <typename T> const TypeA<T> TypeA<T>::INSTANCE=TypeA<T>(1);

int main(int argc, char **argv){
    std::cout << TypeA<int>::INSTANCE.mData << std::endl;
}
#包括
模板
A类{
公众:
T-mData;
TypeA(T数据):mData(数据){}
静态常量类型实例;
};
模板常量TypeA TypeA::实例=TypeA(1);
int main(int argc,字符**argv){
标准::cout
#include <iostream>

template <typename T>
class TypeA{
public:
    T mData;
    TypeA(T data) : mData(data){}

    static const TypeA<T> INSTANCE;
};

template <typename T>
const TypeA<T> TypeA<T>::INSTANCE = TypeA<T>(1);

int main(int argc, char **argv){
    std::cout << TypeA<int>::INSTANCE.mData << std::endl;
}
#include <iostream>
template <typename T>
class TypeA{
public:
    T mData;
    TypeA(T data) : mData(data){}
    static const TypeA<T> INSTANCE;
};
template <typename T> const TypeA<T> TypeA<T>::INSTANCE=TypeA<T>(1);

int main(int argc, char **argv){
    std::cout << TypeA<int>::INSTANCE.mData << std::endl;
}