在重载的 operator() 上指定模板参数
Specifying template parameters on overloaded operator()
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?
您可以使用 L
or l
suffix 指定整数文字 1
应被视为 long
而不是 int
,例如:
foo()(1L)
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?
您可以使用 L
or l
suffix 指定整数文字 1
应被视为 long
而不是 int
,例如:
foo()(1L)