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/