处理模板函数的简单示例。代码编译并按预期工作。但我的问题是为什么“Cmp”和“Lit”都需要“静态”?否则,它不会编译?
非常感谢!
template<class T> class Cmp{
public:
static int work(T a, T b) {
std::cout << "Cmp\n";
return 0;
}
};
template<class T> class Lit{
public:
static int work(T a, T b){
std::cout << "Lit\n" ;
return 0;
}
};
template<class T, class C>
int compare(const T &a, const T &b){
return C::work(a, b);
}
void test9(){
compare<double, Cmp<double> >( 10.1, 20.2);
compare<char, Lit<char> >('a','b');
}
答案 0 :(得分:3)
C::work(a, b)
命名类work()
的静态成员函数C
。
答案 1 :(得分:1)
此处需要static
的原因是compare
模板功能中有这一行:
return C::work(a, b);
语法C::work(a, b)
这里的意思是“调用嵌套在类work
中的函数C
。通常,这会尝试在不提供接收器对象的情况下调用成员函数。也就是说,通常你通过编写
work
的方式
C myCObject;
myCObject.work(a, b);
但是,在这种情况下,我们不想调用成员函数。相反,我们希望函数work
类似于常规函数,因为我们可以在任何时候调用它而不使它相对于其他对象行为。因此,我们标记这些函数static
,以便可以像常规函数一样调用它们。
希望这有帮助!