我試着編譯發佈的例子(C++ Service Providers)並且未能通過VS8 VC9。我幾乎沒有模板經驗。
有什麼建議嗎?
坦克。幫助糾正源代碼,用模板
這些都是錯誤的:
dictionarystl.cpp(40):錯誤C2663: '的std :: _樹< _Traits> ::發現':2個重載有this指針
dictionarystl.cpp沒有法律轉換(48):錯誤C2679:二進制「[」:沒有操作員發現這需要類型的右邊的操作數「const的TYPE_INFO * __ W64」(或沒有可接受的轉化率)
#include <typeinfo>
#include <map>
#include <string>
using namespace std;
class SomeClass
{
public:
virtual ~SomeClass() {} // virtual function to get a v-table
};
struct type_info_less
{
bool operator() (const std::type_info* lhs, const std::type_info* rhs) const
{
return lhs->before(*rhs) != 0;
}
};
class TypeMap
{
typedef map <type_info *, void *, type_info_less> TypenameToObject;
TypenameToObject ObjectMap;
public:
template <typename T>
T *Get() const
{
TypenameToObject::const_iterator iType = ObjectMap.find(&typeid(T));
if (iType == ObjectMap.end())
return NULL;
return reinterpret_cast<T *>(iType->second);
}
template <typename T>
void Set(T *value)
{
ObjectMap[&typeid(T)] = reinterpret_cast<void *>(value);
}
};
int main()
{
TypeMap Services;
Services.Set<SomeClass>(new SomeClass());
SomeClass *x = Services.Get<SomeClass>();
}