以下内容让我遇到了编译错误:
我尝试过,
要明确的是,我希望明确说明函数应该接受一个shared_ptr或weak_ptr,因此我不喜欢R const & p的解决方案。
当然,为了完整性,这也可以工作:
无法推断出“const std::weak_ptr<_Ty> &”的模板参数 来自“std::shared_ptr”
#include <memory>
class Foo
{
public:
template<typename R>
void Bar(std::weak_ptr<R> const & p)
{
p;
}
};
int main(void)
{
auto foo = Foo();
auto integer = std::make_shared<int>();
foo.Bar(integer);
}
我尝试过,
template<typename R>
void Bar(std::weak_ptr<R::element_type> const & p)
{
}
这段代码似乎在语法上不正确。下面的代码可以工作,但我想知道是否可能在p标签中进行转换,而不需要创建另一个临时变量?
template<typename R>
void Bar(R const & p)
{
auto w = std::weak_ptr<R::element_type>(p);
}
要明确的是,我希望明确说明函数应该接受一个shared_ptr或weak_ptr,因此我不喜欢R const & p的解决方案。
当然,为了完整性,这也可以工作:
template<typename R>
void Bar(std::shared_ptr<R> const & p)
{
auto w = std::weak_ptr<R>(p);
}