【问题标题】:How can you make sure a C++ function can be called as [duplicate]您如何确保可以将 C++ 函数调用为 [重复]
【发布时间】:2025-11-30 01:25:01
【问题描述】:

如何确保可以调用 C++ 函数,例如void foo(int, int) 但不像其他任何类型,如 void foo(long, long)?

【问题讨论】:

  • 你是想解决一个特定的问题,还是这是学术问题?

标签: c++


【解决方案1】:

添加已删除的模板重载:

template <typename A, typename B> void foo(A, B) = delete;

void foo(int x, int y) {...}

对于除int, int 之外的任何参数类型,这将是一个更好的匹配(导致错误)。

【讨论】:

  • foo(0LL, {}); 使用long longint 调用int 版本。
  • 你也可以使用template &lt;typename A&gt; void foo(A, A) = delete; 来捕捉它。
  • @user975989 你是否必须为 3 个或更多参数的所有排列执行此操作?
  • @AyxanHaqverdili 嗯,好点子,也许您可​​以将foo 制作为模板并将其专门用于&lt;int, int&gt;?看起来很笨拙,最好制作一个只能从 int 构造的包装器类型(与此类似)。