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
.
Если я хочу продолжать использовать перегрузку оператора вместо обычного имени, обречен ли я использовать ужасный синтаксис под комментарием (что работает)?