我有一个函数,它找到两个节点之间的最短路径。现在我使用以下节点类:
struct SConnection
{
SConnection(CNode *To, unsigned int Distance);
CNode *To;
unsigned int Distance;
};
class CNode
{
public:
CNode();
std::vector<SConnection> Connections()const;
bool AddConnection(CNode *mTo, unsigned int nDistance);
bool AddConnection(const SConnection &mConnection);
bool RemoveConnection(CNode *mTo);
CNode* Addr();
bool Completed = false;
CNode *PreviousNode = 0;
unsigned int XPos = 0;
unsigned int YPos = 0;
private:
std::vector<SConnection> m_vConnections;
};
如果想让这个功能更通用,我该怎么做呢?采用template
代替CNode
的实例是显而易见的。但是其他类可能没有函数,成员的调用与CNode
完全相同。传递函数指针会起作用,但我怀疑这是“现代”解决方案。
class SomeClass
{
public:
int a;
};
int HelperFunction(SomeClass obj)
{
return obj.a;
}
template<typename T>
void MyGenericFunction(T obj, int(*FunctionToGetSomeValue)(T))
{
int ValueINeed = (*FunctionToGetSomeValue)(obj);
}
//Calling the function
SomeClass x;
MyGenericFunction(x, HelperFunction);
我认为有更好的方法可以做到这一点,对吧?