模板函数采用模板参数

时间:2011-09-23 22:28:26

标签: c++ templates static

处理模板函数的简单示例。代码编译并按预期工作。但我的问题是为什么“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');
}

2 个答案:

答案 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,以便可以像常规函数一样调用它们。

希望这有帮助!