读书人

将C++代码手工移植为JAVA代码 是不是纯

发布时间: 2013-10-21 17:03:30 作者: rapoo

将C++代码手工移植为JAVA代码 是不是纯扯淡?
我现在手头有一份基于MFC架构的C++项目。

目标是:把部分功能代码移植到安卓上。

目前进展:

注:非指针类型的数据的迁移十分简单,不赘述。

1. struct 类型内成员变量指针。

[html] view plaincopy
<span style="font-family: Arial, Helvetica, sans-serif;">例子:struct Node</span>
[html] view plaincopy
{
/// 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


<span style="color: rgb(255, 0, 0);"> Node* m_next; // queue of active nodes </span>


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指针

例子:



[html] view plaincopy
void* callbackData
[html] view plaincopy
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++之类。但是我自己没有做过。不敢尝试,时间也不那么允许。好久没有给导师提交阶段进展报告了。 c++ java
[解决办法]
楼主这是个体力活啊, 哈哈。。。不是技术活。。。,以前我们有同事就干这个事情。。。

3. 函数指针

例子:typedef bool (*ProgressCallback)( int numSoFar, void* callbackData );

方案:目前无。求指教。

函数指针你就用java的类继承, 利用多态机制来搞。

class A
{
实现一个函数
}

class B super A

, 然后声明个 B 的对象,
[解决办法]
JNI也没法调MFC的,微软的东西..
不仅仅是技术活,更是体力活啊~~
[解决办法]
不要做A语言代码修改为B语言代码的无用功。
也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。
只需让A、B语言代码的输入输出重定向到文本文件,或修改A、B语言代码让其通过文本文件输入输出。
即可很方便地让A、B两种语言之间协调工作。

读书人网 >C++

热点推荐