如何在不使用“运算符”一词的情况下调用模板化运算符?

时间:2010-05-15 16:21:52

标签: c++ templates syntax operator-overloading

class RunAround;
class HopUpAndDown;
class Sleep;

template<typename Acts> int doThis();
template<> int doThis<RunAround>()    { /* run run run.. */ return 3; }
template<> int doThis<HopUpAndDown>() { /* hop hop hop.. */ return 2; }
template<> int doThis<Sleep>()        { /* zzz.. */ return -2; }

struct Results
{   
    template<typename Act> int& operator()()
    {
        static int result;
        return result;
    }
};



int main()
{
    Results results;
    //results<RunAround>() = doThis<RunAround>();
    results.operator ()<RunAround>() = doThis<RunAround>();
    results.operator ()<Sleep>() = doThis<Sleep>();
    return 0;
};

如果我删除了评论,编译器会认为我在课程operator()中需要Results<RunAround>时,在不存在的模板类operator<RunAround>()中调用Results

如果我想继续使用运算符重载而不是普通名称,我注定要使用注释下面的可怕语法(这确实有效)?

1 个答案:

答案 0 :(得分:1)

最舒服的是让模板参数推断适合你:

struct Results {   
    template<typename Act> int& operator()(Act) { /* ... */ }
};

results(RunAround()) = /* ... */;