2012年(158)
分类: C/C++
2012-11-19 11:02:29
有关模板的语法很多很杂,无法一一列举,在此仅测试几个简单常用的语法。
以下有关模板的语法分别使用 gcc3.4.2、VC++6.0 和 Intel
C++8.0 进行测试,GCC342和ICC都能完全通过测试,VC++6.0有部分通不过测试。
1. 模板类静态成员
template
static int
_data;
};
template<> int testClass
template<> int testClass
int main( void )
{
cout << boolalpha << (1==testClass
cout << boolalpha <<
(2==testClass
}
2.
模板类偏特化
template
testClass() { cout << "I, O" << endl; }
};
template
testClass() { cout
<< "T*, T*" << endl; }
};
template
testClass() { cout << "const T*,
T*" << endl; }
};
int main( void ) {
testClass
testClass
testClass
}
[注]: VC++6 编译不通过
3. function template partial
order
template
void swap(
testClass
};
template
x.swap( y );
}
int main( void )
{
testClass
testClass
swap( obj1, obj2 );
}
[注]: VC++6
编译不通过
4. 类成员函数模板
struct testClass {
template
cout << t <<
endl;
}
template
return
T();
}
};
int main( void ) {
testClass obj;
obj.mfun(
1 );
int i = obj;
cout << i << endl;
}
[注]:
对于第二个成员函数模板,VC++6 运行异常
5. 缺省模板参数推导
template
T a;
};
template
I b;
O c;
};
6.
非类型模板参数
template
T
_t;
testClass() : _t(n) {
}
};
int main( void )
{
testClass
testClass
}
7. 空模板参数
template
template
return
false;
};
template
friend bool
operator== <>( const testClass&, const testClass& );
};
[注]:
VC++6 编译不通过
8. 模板特化
template
};
template <> struct testClass
};
9.
template class
X>
struct Widget{
};
[注]: VC++6
编译不通过
10. [hpho]提供的一个事例
struct Widget1
{
template
T
foo(){}
};
templateclass X>
struct
Widget2{
};
[注]: VC++6 编译不通过
11.
数组作模板实参
template
{
cout << typeid(T).name() << " (&bar)[" << N
<< "]" << endl;
};
int main()
{
int a[10];
foo( a );
return 0;
}
[注]: VC++6
编译不通过
12. 模板作为模板的参数
template< class T, template
void Test( T, Y
{
}
[注]: VC++6 编译不通过
13.
template
{
foo() {}
foo( const foo& ) {}
template& ) {}
};
int
main()
{
foo
foo
foo
}
[注]:
网友评论2012-11-19 11:05:08
七猫
#if defined(_WIN32) || defined(_WIN64)
# define BOOST_INTEL_WIN BOOST_INTEL
#else
# define BOOST_INTEL_LINUX BOOST_INTEL
#endif
#if (BOOST_INTEL_CXX_VERSION <= 500) && defined(_MSC_VER)
# define BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS
# define BOOST_NO_TEMPLATE_TEMPLATES
#endif
#if (BOOST_INTEL_CXX_VERSION <= 600)
# if defined(_MSC_VER) && (_MSC_VER <=
网友评论2012-11-19 11:04:48
七猫
vc of boost
#if _MSC_VER < 1300 // 1200 == VC++ 6.0, 1201 == EVC4.2
#pragma warning( disable : 4786 ) // ident trunc to '255' chars in debug info
# define BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS
# define BOOST_NO_VOID_RETURNS
# define BOOST_NO_EXCEPTION_STD_NAMESPACE
// disable min/max macro defines on vc6:
//
#endif
#if (_MSC_VER <= 1300) // 1300 == VC++ 7.0
#if !define