2017-08-02 5 views
0

私が使用する関数Pocoのラッパークラスを記述しようとしています。ここで関数の宣言の引数のデフォルト値を基底クラスから継承する

は私のコードです:

//PocoWrapper.h 
#include <stdio.h> 
#include <Poco/Task.h> 
#include <Poco/TaskManager.h> 
#include <Poco/ThreadPool.h> 

namespace myNamespace{ 

class ThreadPool : Poco::ThreadPool{}; 

} 

私は別のスクリプトでPocoWrapper.hが含まれている場合今、私が使用することができるはずです。

myThreadPool = new myNamespace::ThreadPool(1,4); 

しかし、これはエラーを与える:

//error: C2661: 'myNamespace::ThreadPool::ThreadPool' : no overloaded function takes 2 arguments 

ただし、私が使用した場合:

myThreadPool = new Poco::ThreadPool(1,4); 

コンパイルが正常です。したがって、Poco :: ThreadPoolクラスの関数のデフォルト値を継承しないという問題があります。

ThreadPoolコンストラクタにはデフォルト値があるため、2つの引数でしか使用できません。 documentationから:基底クラスが行うよう

ThreadPool(
    int minCapacity = 2, 
    int maxCapacity = 16, 
    int idleTime = 60, 
    int stackSize = 0 
); 

がどのように私は、2つだけ引数を持つ私のラッパークラスの作業を行うことができますか?

私はC++ 11を使用していません。

+1

メソッドが継承され_but_コンストラクタは特殊なケースです。 [SO:Inheriting constructors](https://stackoverflow.com/a/434784/7478597)をご覧ください。これはPocoとは特に関係がないので、重複のように見えます。 – Scheff

+0

パブリック継承は必要ありませんか? – danielspaniol

+0

[継承コンストラクタ]の可能な複製(https://stackoverflow.com/questions/347358/inheriting-constructors) – Scheff

答えて

1

あなたはusingその集団の名前で基本クラスのコンストラクタを継承することができます

namespace Poco { 
    struct ThreadPool{ 
     ThreadPool(int); 
     ThreadPool(int,int); 
    }; 
} 

namespace myNamespace{ 

    class ThreadPool : Poco::ThreadPool{ 
     using Poco::ThreadPool::ThreadPool; // inherits constructors 
    }; 

} 
+0

ありがとうございます。エラーが発生しました。: "エラーC2876:Poco :: ThreadPool:すべてのオーバーロードにアクセスできません"公共のコンストラクタのみを継承するにはどうすればよいですか? – Blue7

1

理由はコンストラクタがを継承していないということです。したがって、2つの引数を受け入れるThreadPoolクラスのコンストラクタはありません。

一方、Poco::ThreadPoolクラスを作成する場合は、任意のコンストラクタを自由に使用できます。 documentationによれば、2つのコンストラクタがあり、それぞれがオプションのパラメータを受け入れるので、パラメータの完全なリストを指定する必要はありません。

あなたはコンストラクタを「継承」するusing declarationを使用する場合があります。

class ThreadPool : Poco::ThreadPool {}; 
    using Poco::ThreadPool::ThreadPool; 
} 
関連する問題