【发布时间】:2020-10-21 08:43:31
【问题描述】:
假设我有一个模板类,以及一个在指向 const 的共享指针中接受它的函数,使用它的模板参数作为其签名的一部分:
template <class T>
class SomeClass {};
// Doesn't need to modify the SomeClass object.
template <class T>
T DoSomething(std::shared_ptr<const SomeClass<T>>);
在这种情况下,我可以通过显式指定模板参数,使用指向非成本SomeClass 的共享指针调用DoSomething:
DoSomething<int>(std::make_shared<SomeClass<int>>());
但如果不明确,这不起作用,因为类型推导失败。
在这种情况下,如何通过类型推导使函数可调用?显然,我可以编写另一个接受指向非 const 的共享指针的重载,但是需要将这种类型的每个函数定义两次,这很麻烦。
理想情况下,在重载解析时输入不正确(指向其他事物的共享指针或非共享指针)会失败。
【问题讨论】:
标签: c++ templates sfinae typetraits type-deduction