1 模板类和模板函数
对于大多数人来说都知道如何定义模板类和模板函数,很少会触及模板类的成员函数还有自己的模板参数,在seastar
框架中大量使用模板,便可以见到模板类的模板成员函数的使用
2 定义与使用
为什么这样定义和实现,C++
的规定而已,直接上例子:
#include <iostream>
template <typename T>
class Foo
{
public:
Foo() {}
~Foo() {}
//成员函数有自己的模板参数
template <typename S>
void print_s_a(S p)
{
std::cout << "S= " << p << std::endl;
std::cout << "T = " << _a << std::endl;
}
template <typename TT>
void print_tt_a(TT p);
private:
T _a;
};
//注意成员模板函数定义在类外的方法
template <typename T>
template <typename TT>
void Foo<T>::print_tt_a(TT p)
{
std::cout << "TT = " << p << std::endl;
std::cout << "T = " << _a << std::endl;
}
int main()
{
Foo<int> f;
f.print_s_a("123");
f.print_tt_a("456");
return 0;
}
3 总结
C++模板是个比较复杂的问题,尤其是C++11更是丰富了模板相关标准,推荐阅读seastar
的源码,对C++的理解可以更加深入。