c++ - 如何在不使用单词 'operator' 的情况下调用模板化运算符重载?

标签 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 .

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

最佳答案

最舒服的事情是让模板参数推导为你工作:

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

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

关于c++ - 如何在不使用单词 'operator' 的情况下调用模板化运算符重载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2840830/

相关文章:

templates - ColdFusion - 缺少类文件 = JRun 错误

c - "static"在C中是什么意思?

haskell - 为什么 Haskell 使用箭头表示函数的类型?

c++ - 支持按位运算的精确 X 位大小的变量 (c++)

c++ - 如何在错误消息 'distinct'可能的符号中获得增强精神?

c++ - C 中是否有相当于 %* 或 Environment.CommandLine 的东西?

c++ - 具有在语法树中的节点上定义的层次结构的表达式模板

python - django if 语句中的括号

c++ - 为什么当编译器从 C++ 代码创建完全相同类型的指令时,此代码无法编译

Python slice 如何区分切片参数和默认参数(例如,x[i :] vs. x[i :None])?