0

私は大きなプロジェクトに取り組んでいますが、同じ引数を取り、同じ名前の関数が 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);
   }
}
4

1 に答える 1