C++两个模板,相同的名称,相同的签名,不同的类:如何强制编译器使用预期的模板

  • 本文关键字:何强制 编译器 C++ 两个 c++
  • 更新时间 :
  • 英文 :


我正在尝试使用以下C++模板:

_CONSTEXPR20 void swap(_Ty& _Left, _Ty& _Right) noexcept(
is_nothrow_move_constructible_v<_Ty>&& is_nothrow_move_assignable_v<_Ty>) {
_Ty _Tmp = _STD move(_Left);
_Left    = _STD move(_Right);
_Right   = _STD move(_Tmp);
}

来自Microsoft实用程序标准标头(核心(,但编译器继续使用以下模板:

inline void swap(thread& _Left, thread& _Right) noexcept {
_Left.swap(_Right);
}

来自Microsoft线程标准头。

如何强制编译器使用第一个实现?

如注释中所述,编译器更喜欢函数的非模板重载,而不是模板重载。

如果您需要使用模板版本,只需显式传递类型参数:

swap<std::thread>(thread1, thread2);

最新更新