#include <iostream>
#include <boost/shared_ptr.hpp>
#include <boost/make_shared.hpp>
using namespace std;
struct TestClass
{
static void Create(boost::shared_ptr<const int> shp)
{
cout << "TestClass::Create: " << *shp << endl;
}
template <typename T>
static void CreateT(boost::shared_ptr<const T> shp)
{
cout << "TestClass::CreateT: " << *shp << endl;
}
};
int main()
{
boost::shared_ptr<int> shpInt = boost::make_shared<int>(10);
boost::shared_ptr<const int> shpConstInt = shpInt;
TestClass::Create(shpInt); // OK
TestClass::Create(shpConstInt); // OK
//error C2664: 'void TestClass::CreateT<int>(boost::shared_ptr<T>)' :
//cannot convert parameter 1 from 'boost::shared_ptr<T>' to 'boost::shared_ptr<T>'
TestClass::CreateT(shpInt); // ERROR
TestClass::CreateT(shpConstInt); // OK
// workaround
boost::shared_ptr<const int> shpConstInt2 = shpInt;
TestClass::CreateT(shpConstInt2); // OK
return 0;
}
問題>爲什麼TestClass::CreateT(shpInt)
不起作用,而TestClass::Create(shpInt)
正常工作。是否因爲TestClass::CreateT
是僅支持靜態綁定的模板函數,無法自動從boost::shared_ptr<T>
轉換爲boost::shared_ptr<const T>
?靜態非模板成員函數與靜態模板成員函數
謝謝
對於'CreateT',它應該嘗試轉換哪一個(許多'T'可能是可能的)?順便說一句,'CreateT(shpInt)'應該有效。 –
Jarod42
是的,它在我做出更改後生效。爲什麼最初的那個不起作用? – q0987
我的意思是:如何boost :: shared_ptr '和'boost :: shared_ptr'有關係嗎? (你期望'T == U') –
Jarod42