【发布时间】:2014-10-14 02:17:42
【问题描述】:
我想使用模板operator(),但不确定是否可行。这是一个不会编译的简单测试用例。我的语法有问题吗,或者这根本不可能?
struct A {
template<typename T> void f() { }
template<typename T> void operator()() { }
};
int main() {
A a;
a.f<int>(); // This compiles.
a.operator()<int>(); // This compiles.
a<int>(); // This won't compile.
return 0;
}
【问题讨论】:
-
不使用速记语法,没有。
-
[edited] 你能告诉我们运营商如何使用
T吗? -
@MarkB 仅举一个例子:
throw T或return T(此处并非如此,但也不会被推断)。 -
你想做什么?您似乎在尝试使用错误工具。
-
@Paul 你的意思是函数 implementation 取决于
T还是签名取决于?如果签名依赖,模板类型推导可能是可能的(但在某些情况下不是)。一个技巧(并非总是可能)是添加一个仅为类型推导的虚拟参数,例如operator()(T dummy),然后使用a(int())调用它。它将被优化掉,因此不涉及运行时开销成本,但它需要T有一个没有副作用的默认构造函数。但我不确定这是否真的比a.operator()<int>()更具可读性。
标签: c++ templates operator-overloading