【发布时间】:2021-09-19 08:17:41
【问题描述】:
struct foo{
template<typename T>
auto operator()(T arg) { return T{}; }
}
要使用operator(),我将其称为:foo()(1),T 将被推导出为int。
但是,如果我想将 T 指定为其他内容,例如 long,似乎唯一可行的方法是,这会破坏使用 operator() 的原因:
foo().operator()<long>(1);
还有更好的选择吗?
我正在考虑让foo 采用模板参数U 并将U 默认为void;如果U 不是void,T 将默认为U。但是,我宁愿只更改 operator() 函数。也许改用 lambda?
【问题讨论】:
-
foo()(long{1}) -
如果你打算使用
{}来初始化long,你也可以使用它来初始化foo,同样:foo{}(long{1});但是,它会更容易使用@ 987654344@ 或1l而不是声明1是long,而不是显式指定long类型:foo{}(1L); -
所以我不让我删除它,所以我会编辑它。问一个新的。没有理由使您已经收到的答案无效。
-
@NathanOliver 你是对的,会问一个新的。
标签: c++ operator-overloading template-argument-deduction