【发布时间】:2025-11-30 01:25:01
【问题描述】:
如何确保可以调用 C++ 函数,例如void foo(int, int) 但不像其他任何类型,如 void foo(long, long)?
【问题讨论】:
-
你是想解决一个特定的问题,还是这是学术问题?
标签: c++
如何确保可以调用 C++ 函数,例如void foo(int, int) 但不像其他任何类型,如 void foo(long, long)?
【问题讨论】:
标签: c++
添加已删除的模板重载:
template <typename A, typename B> void foo(A, B) = delete;
void foo(int x, int y) {...}
对于除int, int 之外的任何参数类型,这将是一个更好的匹配(导致错误)。
【讨论】:
foo(0LL, {}); 使用long long 和int 调用int 版本。
template <typename A> void foo(A, A) = delete; 来捕捉它。
foo 制作为模板并将其专门用于<int, int>?看起来很笨拙,最好制作一个只能从 int 构造的包装器类型(与此类似)。