我想编写一个如下所示的函数:
template<class T>
void Foo(const std::shared_ptr<const T>& ptr);
所以我可以这样调用它:
std::shared_ptr<int> ptr;
Foo(ptr);
但是,编译器无法推导出 T,我必须将其显式化:
Foo<int>(ptr);
或者用 void Foo(const std::shared_ptr<T>& ptr)
重载它.
我可以有一个单一的声明Foo
与 const T
这样T
可以推导出来吗?
最佳答案
你的问题是ptr
声明为 std::shared_ptr<int>
同时foo
需要 std::shared_ptr<const int>
.要么你声明 ptr
使用 const 限定符:
std::shared_ptr<const int> ptr;
Foo(ptr);
或者您从 foo
的声明中删除 const 限定符:
template<class T>
void Foo(const shared_ptr<T>& ptr);
或者,除非你真的需要知道 foo
你正在处理一个 shared_ptr
, 使 foo
真正通用的:
template<class T>
void Foo(const T& ptr);
关于c++ - 在函数声明中推导 shared_ptr T,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39872033/