模板化对象的模板函数调用方法

时间:2014-11-23 18:31:18

标签: c++ function templates methods dereference

我有一个我正在尝试模板的函数,所以我可以将它重用于几个不同的对象类型,它们共享相同的方法名称来获取/设置信息。我还在学习模板,这是我第一次真正尝试使用它们来尝试消除重复的代码,我认为我必须做一些非法或不正确的事情。

这是我的功能,减少到我挂断的第一行代码:

//
// Function - AddObjectToListboxAndMap: This function adds a newly created templated objected to the given map and listbox after uniquely naming it, then selects it
//
template <typename T>
void AddObjectToListboxAndMap(ListBox^ lbObject, std::map<std::string, T>* tmap, T tobj)
{
    // Uniquely name object
    tobj->SetName("new object" + boost::lexical_cast<std::string>(tobj->(GetGUID())));

    // More code here...
}

我正在使用4个不同的std :: map对象:

std::map<std::string, Area*>* listbox_to_world_area_map;
std::map<std::string, Room*>* listbox_to_area_rooms_map;
std::map<std::string, Mob*>* listbox_to_area_mobs_map;
std::map<std::string, Item*>* listbox_to_area_items_map;

这就是我调用函数的方式:

// "area" previously initialized...
Room* r = area->CreateAndAddRoom();
AddObjectToListboxAndMap<Room*>(lbEditRooms, listbox_to_area_rooms_map, r);

当调用AddObjectToListboxAndMap函数的第一行时,出现语法错误: 错误1错误C2059:语法错误:'('

经过一番挖掘,我觉得问题是编译器不知道如何调用模板类型对象的方法。我是否需要开始搞乱函数指针以使其工作,或者我错过了一些简单的东西?我希望只是让编译器抛出一个错误,如果代码在别处调用函数并传递给它一个没有“SetName”方法的对象,但它可能不会这样工作。关于如何正确处理这个问题的任何想法?

0 个答案:

没有答案