我现在手头有一份基于MFC架构的C++项目。
目标是:把部分功能代码移植到安卓上。
目前进展:
注:非指针类型的数据的迁移十分简单,不赘述。
1. struct 类型内成员变量指针。
例子:struct Node
{
/// it seems that the member order should be placed according to access frequency
NLinkFlowType m_nCap[NeighborhoodSize];
TLinkFlowType m_tCap; // if m_tCap > 0, then residual capacity of edge source->node is m_tCap
// if m_tCap < 0, then residual capacity of edge node->sink is -m_tCap
unsigned int m_ts; /// time stamp
unsigned int m_dist; /// distance to the terminal
unsigned int m_parent : 4;
unsigned int m_tree : 1; // 0 = source, 1 = sink (if parent!=PARENT_FREE)
unsigned int m_isDumb: 1; /// whether participating in the maxflow
Node* m_next; // queue of active nodes
NLinkFlowType m_nCapOld[3]; /// for recording the capacity in the modified residual graph
NLinkFlowType m_nCapSub[3]; /// for sub-division
}; /// struct Node
方案:将struct类型转换为class类型。其中的C++的指针队列部分就忽略掉。
2. 类中成员变量&函数中成员变量指针
方案:转换为class类型。
3. 函数指针
例子:typedef bool (*ProgressCallback)( int numSoFar, void* callbackData );
方案:目前无。求指教。
4. 形式参数& 函数返回值
例子: Node* GetNeib(Node* p, int e)
{
return (Node*)((char*)p + m_nodeShifts[e]);
}
方案: 转换为class类型。
5. void指针
例子:
void* callbackData
GridGraph8::GridGraph8(int sizeX, int sizeY, ProgressCallback abortCallback, void* callbackData) : m_nodes(NULL), m_pAuxNodeInfo(NULL), m_threadsNum(1), m_abortCallback(abortCallback), m_callbackData(callbackData) { Allocate(sizeX, sizeY); }
方案:目前无。求指教。
我看网上有说JAVA中用JNI调用C++之类。但是我自己没有做过。不敢尝试,时间也不那么允许。好久没有给导师提交阶段进展报告了。