【发布时间】:2012-02-02 16:16:35
【问题描述】:
我想通过重载 () 作为 getter 方法来为类添加一些语法糖。但是,getter 方法采用非类型模板参数。考虑一个简单的测试用例:
#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++ 语法是否支持我正在尝试做的事情,还是我应该放弃并坚持使用 getter 的命名方法?
【问题讨论】:
-
我现在无法证明这一点,但我确信唯一的方法是
foo.operator()<3>(),这可能会破坏目的。
标签: c++ templates operator-overloading