模板化类无法从std :: shared_ptr <t <n>&gt;进行隐式转换。到std :: shared_ptr <const t <n =“”>&gt;

时间:2015-11-04 05:32:37

标签: c++ templates c++11 c++14

失败的代码如下:

#include <memory>

template<size_t N>
class A
{};

template<size_t N>
int testFct(std::shared_ptr<const A<N>> aptr) { return 1; }

int main() {
    auto APtr = std::make_shared<A<2>>();
    testFct(APtr);
}

在类似的情况下,可以隐式地从std::shared_ptr<T>投射到std::shared_ptr<const T> - 为什么我会收到错误通知我'std::shared_ptr<A<2ul> >' is not derived from 'std::shared_ptr<const A<N> >'

问题可能是A<N> and A<2>之间没有关系,但该函数模板化只需要一个N。我可以安排函数来避免(重新)模板化这个类吗?

另一方面,添加功能

template<size_t N>
int testFct(std::shared_ptr<A<N>> aptr) { 
    return testFct(static_cast<std::shared_ptr<const A<N>>>(aptr)); 
}

允许代码编译(并且可能在没有问题的情况下运行)。

0 个答案:

没有答案