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); } inline void swap(thread& _Left, thread& _Right) noexcept { _Left.swap(_Right); }

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); } inline void swap(thread& _Left, thread& _Right) noexcept { _Left.swap(_Right); },c++,C++,从Microsoft线程标准头 如何强制编译器使用第一个实现?如注释中所述,编译器更喜欢函数的非模板重载,而不是模板重载 如果需要使用模板版本,只需显式传递类型参数: swap(线程1、线程2); 第一个问题是,您是否正在交换线程对象?因为如果你是,特定类型总是会超过模板或自动类型。你是在处理std::thread对象吗?请发布一个调用不需要的重载而不是您想要的重载的小代码示例?尽管要注意,对于线程来说,这是预期的功能。您如何尝试它?请发一封信。同时解释为什么要使用其中一个而不是另一个。请编辑您

从Microsoft线程标准头


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

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

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

swap(线程1、线程2);

第一个问题是,您是否正在交换
线程
对象?因为如果你是,特定类型总是会超过模板或自动类型。你是在处理
std::thread
对象吗?请发布一个调用不需要的重载而不是您想要的重载的小代码示例?尽管要注意,对于线程来说,这是预期的功能。您如何尝试它?请发一封信。同时解释为什么要使用其中一个而不是另一个。请编辑您的问题并添加新的详细信息。同时提供您想要使用的完整模板感谢所有人的及时回复。我尝试实现的代码如下:模板静态void将向量重置为默认值(T&value){std::swap(T(),value);},我尝试使用它:SupportingMethods:将向量重置为默认值(wd);其中wd:std::vector Sql::wd;//矢量,包含未来10年的所有工作日(默认值),是的,我包括在内,因为我使用了一些线程功能。