2016-07-05 13 views
1

私は以下のコードを持っています。私はクラスを作成しようとしています、サーバを与えられたサーバのタイプを見つけて、そのようなサーバの正しいメソッドを追加するクラスです。今のところ私はダミーのクラスを持っていて、私はここで立ち往生しています。 defineServer()関数では、マクロを定義し、その値に1または2のいずれかの値を割り当てます。クラス宣言の外で、それらを含めるようにします。この問題を解決する方法はありますか?クラス内に外部関数宣言を追加する方法C++?

Server.cpp

class Server { 
public: 
    Server(int server) { 
     //setServerType(getServerType()); 
     //defineServer(getServerType()); 
     this->server = server; 
    } 
    void defineServer() { 
     if(this->server == 1) { 
      #define SERVER 1 
      std::cout << "SERVER_1 defined" << std::endl; 
     } 
     if(this->server == 2){ 
      #define SERVER 2 
      std::cout << "SERVER_2 defined" << std::endl; 
     } 
    } 
    #if SERVER 1 
     #include "Server1.h" 
     std::cout << "Server 1 added" << std::endl; 
    #endif // SERVER_1 
    #if SERVER 2 
     #include "Server2.h" 
     std::cout << "Server 2 added" << std::endl; 
    #endif // SERVER_2 
private: 
    int server; 
}; 

主な機能:

int main() { 
    Server server = Server(1); 
    server.defineServer(); 
    server.print(); 
    return 0; 
} 

Server1.h

void print() { 
    std::cout << "Ye1" << std::endl; 
} 

Server2.h

void print(){ 
    std::cout << "Ye2" << std::endl; 
} 
+0

サーバは同じバイナリモジュールまたは個別のもの( 'DLL'または' .so's)で実装されていますか? – mvidelgauz

+1

'#if'はあなたがしたいことをしません。 'Server'メンバ関数の中に通常の' if'が必要です。また、実行時にメンバ関数を含めることも除外することもできないため、他のものを設計する必要があります。 –

+0

基本的には幾分基本的な機能を持つわずかに異なる2つのオブジェクトです。私は、他のプログラムが正しいメンバ関数を使用できるようにするために、どのオブジェクトを扱っているのかを検出するオブジェクトを作成しようとしています。 – IntiM

答えて

2

これは非常に悪いデザインです。 Serverクラスのサブクラス化、print()メソッドの再実装、またはif-else文のprint()への置き換えをお勧めします。

関連する問題