【问题标题】:Specifying template parameters on overloaded operator()在重载的 operator() 上指定模板参数
【发布时间】: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


【解决方案1】:

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

foo()(1L)

【讨论】:

    猜你喜欢
    • 2014-06-22
    • 2016-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多