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
。
如果我想继续使用运算符重载而不是普通名称,我注定要使用注释下面的可怕语法(这确实有效)?
答案 0 :(得分:1)
最舒服的是让模板参数推断适合你:
struct Results {
template<typename Act> int& operator()(Act) { /* ... */ }
};
results(RunAround()) = /* ... */;