我正在做一个大项目,碰巧在两个地方有函数采用相同的参数并具有相同的名称,尽管它们做不同的事情。有人建议我使用外观方法并将所有内容都放在静态库中。然而它让程序变得非常奇怪。尽管包装器是单独的静态库并具有单独的名称空间,但函数并没有相互分离。总是来自 A.lib 的函数被 B::BF() 包装器调用。
可执行:
#include <iostream>
#include "A/AWrapper.h"
#include "B/BWrapper.h"
int main()
{
std::cout<<"A="<<A::AF(2)<<std::endl;
std::cout<<"B="<<B::BF(2)<<std::endl; //uses function int F(int x) from A lib
getchar();
return 0;
}
文件结构如下:
目录 A:
FA.h, FA.c //function int F(int x) is defined - C language
AWrapper.h, AWrapper.cpp //a simple wrapper function AF of int F(int x); C++
目录 B:
FB.h, FB.c //function int F(int x) is defined - C language
BWrapper.h, BWrapper.cpp //a simple wrapper function AF of int F(int x); C++
以上是调用它们的简单程序。详细文件列表:
图书馆 - - - - - - - :
发.h:
#ifndef A_H_INCLUDED
#define A_H_INCLUDED
int F(int x);
#endif // A_H_INCLUDED
FA.c:
#include "FA.h"
int F(int x)
{
return x*x;
}
AWrapper.h:
#ifndef AWRAPPER_H_INCLUDED
#define AWRAPPER_H_INCLUDED
namespace A{
int AF(int x);
}
#endif // AWRAPPER_H_INCLUDED
AWrapper.cpp
#include "AWrapper.h"
extern "C"{
#include "FA.h"
}
namespace A{
int AF(int x)
{
return F(x);
}
}
B库--------------:FB.h:
#ifndef B_H_INCLUDED
#define B_H_INCLUDED
int F(int x);
#endif // B_H_INCLUDED
FB.c:
#include "FB.h"
#define n 5
int F(int x)
{
return -x*x*n;
}
BWrapper.h:
#ifndef BWRAPPER_H_INCLUDED
#define BWRAPPER_H_INCLUDED
namespace B{
int BF(int x);
}
#endif // BWRAPPER_H_INCLUDED
BWrapper.h:
#include "BWrapper.h"
extern "C"{
#include "FB.h"
}
namespace B{
int BF(int x)
{
return F(x);
}
}