私は大きなプロジェクトに取り組んでいますが、同じ引数を取り、同じ名前の関数が 2 つの場所にあるのに、異なることをしているということがありました。ファサードアプローチを使用して、すべてを静的ライブラリに配置するようにアドバイスされました。しかし、それはプログラムを非常に奇妙にしました。ラッパーは別個の静的ライブラリであり、別個の名前空間を持つという事実にもかかわらず、関数は互いに分離されていません。常に 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++
上記は、それらを呼び出す簡単なプログラムです。詳細なファイルのリスト:
図書館 - - - - - - - :
FA.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);
}
}