在重载的 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 不是 voidT 将默认为 U。但是我更愿意只更改 operator() 函数。也许改用 lambda?

您可以使用 L or l suffix 指定整数文字 1 应被视为 long 而不是 int,例如:

foo()(1L)