C++ 模板化类无法从std::shared\u ptr<;隐式强制转换;T<;N>&燃气轮机;至标准::共享\u ptr<;常数T<;N>&燃气轮机;
失败代码如下:C++ 模板化类无法从std::shared\u ptr<;隐式强制转换;T<;N>&燃气轮机;至标准::共享\u ptr<;常数T<;N>&燃气轮机;,c++,templates,c++11,c++14,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(AP
#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);
}
允许代码进行编译(并假定在没有问题的情况下运行)。FWIW,使用
testFct(APtr)代码>适合我。我使用的是g++4.9.3。函数模板要求参数类型完全匹配。@n.m.或者使用SFINAE具有基/派生关系(因此出现错误消息)可能会有帮助:。
template<size_t N>
int testFct(std::shared_ptr<A<N>> aptr) {
return testFct(static_cast<std::shared_ptr<const A<N>>>(aptr));
}