Я хотел бы добавить синтаксический сахар к классу, перегрузив () как метод получения. Однако метод получения принимает аргумент шаблона, не являющийся типом. Рассмотрим простой тестовый пример:
#include <iostream>
class Foo
{
public:
template <int i> void get()
{
std::cout << "called get() with " << i << std::endl;
}
template <int i> void operator()()
{
std::cout << "called overloaded () with " << i << std::endl;
}
};
int main()
{
Foo foo;
foo.get<1>();
foo.get<2>();
foo<3>(); // error: no match for ‘operator<’ in ‘foo < 3’
return 0;
}
Он компилируется и запускается, как ожидалось, если foo <3> ();
закомментировано. Поддерживает ли синтаксис C ++ то, что я пытаюсь сделать, или я должен просто отказаться и придерживаться именованного метода для получателя?