模板类静态变量

来源:互联网 发布:c语言创建一张表的语句 编辑:程序博客网 时间:2024/06/05 04:55
/*  * File:   main.cpp * Author: Vicky.H * */#include <iostream>class A {public:    static int _var;};int A::_var = 1;template<typename T>class B {public:    static int _var;};//int B::_var = 1; ERROR//int B<>::_var = 1; ERROR/**该程序,使用VC编译正确,使用MingW与GNU编译都会在27,28,29错误!*/int B<char>::_var = 1;int B<int>::_var = 4;int B<double>::_var = 8;/* *  */int main(void) {    std::cout << B<char>::_var << std::endl;    std::cout << B<int>::_var << std::endl;    std::cout << B<double>::_var << std::endl;    return 0;}


该程序,在win32下,mingw与centos下gnu4.1.2编译均错误,使用VC编译通过.

而解决这个问题的办法也很简单,使用"模版特化"

/*  * File:   main.cpp * Author: Vicky.H * */#include <iostream>class A {public:    static int _var;};int A::_var = 1;template<typename T>class B {public:    static int _var;};//int B::_var = 1; ERROR//int B<>::_var = 1; ERROR/**该程序,使用VC编译正确,使用MingW与GNU编译都会在27,28,29错误!*///int B<char>::_var = 1;//int B<int>::_var = 4;//int B<double>::_var = 8;/**以上问题,可以通过模版特化解决,如下*/template<>class B<char>{public:    static int _var;};int B<char>::_var = 1;template<>class B<int>{public:    static int _var;};int B<int>::_var = 4;template<>class B<double>{public:    static int _var;};int B<double>::_var = 8;/* *  */int main(void) {    std::cout << B<char>::_var << std::endl;    std::cout << B<int>::_var << std::endl;    std::cout << B<double>::_var << std::endl;    return 0;}


编译,mingw,gnu编译,运行通过.

原创粉丝点击