你好,我用c ++和我坚持这个问题。我有模板类,你可以看到下面有另一个模板方法PrintSpecificObject。在实际项目中,我有一组不同的对象,我需要例如打印只是可以投射的对象" K"。无论如何,我的问题是" PrintThatObject"方法或者用我在main中调用它的方法。 谢谢你的帮助。
template<typename T>
class Foo {
public:
std::vector<T*> v;
template<typename K>
void PrintSpecificObject(void(*uFunc)(K*)) {
for (std::vector<T*>::iterator i = begin(); i != end(); ++i) {
if (dynamic_cast<K*>(i) != nullptr) {
PrintThatObject(i); //<------- There i call it
}
}
}
//<------- How this method shoud look? ------>
void PrintThatObject(int i) {
std::cout << i;
}
};
int main() {
Foo<int*> f;
f.PrintSpecificObject<int>(f.PrintThatObject); // Error C3867
f.PrintSpecificObject<int>(&Foo<int*>::PrintThatObject); // Error C2664
// <------- Or How should i call that method? ------->
}
答案 0 :(得分:1)
您无法将PrintThatObject的任何表示传递给PrintSpecificObject。问题是PrintSpecificObject接受一个函数指针。 PrintThatObject是成员函数。 Huge difference!
您可以修复PrintSpecificObject,或者只是添加一个重载,它不会有歧义,如下所示:
template < typename Object, typename K >
void PrintSpecificObject(Object * o, void (Object::*fun)(K*))
{
//...whatever...
// call function
o->*fun(some_k);
}
您拨打f.PrintSpecificObject<int>(&Foo<?>::PrintThatObject)
?是你传递给Foo以实例化f的类的任何类型。