我想使用模板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;
}
答案 0 :(得分:6)
像评论中提到的克里斯,不,不是用简写语法。您必须使用完整的.operator()<T>()
语法;
答案 1 :(得分:4)
如果确实想要使用模板化operator()
并希望避免编写a.operator()<int>();
之类的结构,则可以向其添加辅助参数:
template <typename T>
struct type{};
struct A
{
template<typename T>
void operator()(type<T>) { }
};
int main()
{
A a;
a(type<int>());
}
在C ++ 14中,您甚至可以通过变量模板省略a(type<int>());
中的空括号:
template <typename T>
struct type_{};
template <typename T>
constexpr type_<T> type{};
struct A
{
template<typename T>
void operator()(type_<T>) { }
};
int main()
{
A a;
a(type<int>);
}
答案 2 :(得分:2)
在C ++语言中无法使用您想要使用的确切语法。
根据您尝试解决的真实问题(问题中没有),我至少可以考虑三个选项:
A
而非操作员本身。operator()
(我不是此选项的忠实粉丝)。