c ++:捕获具有特定特征的对象的函数

时间:2017-08-10 16:26:40

标签: c++ function templates generic-programming

我有一个函数,它找到两个节点之间的最短路径。现在我使用以下节点类:

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);

我认为有更好的方法可以做到这一点,对吧?

0 个答案:

没有答案
相关问题