プラグインフレームワークをプログラミングしています。プラグインはアプリケーションにデータを渡すことになっています。プラグインがデータを置くキューを作成しましたが、プラグインが複数のデータ型(int、bool、char、..)を渡すことができるようにしたいです。 。)1つだけではありません。
それを行うためのアイデアや良い方法はありますか?
プラグインフレームワークをプログラミングしています。プラグインはアプリケーションにデータを渡すことになっています。プラグインがデータを置くキューを作成しましたが、プラグインが複数のデータ型(int、bool、char、..)を渡すことができるようにしたいです。 。)1つだけではありません。
それを行うためのアイデアや良い方法はありますか?
Boostライブラリの使用がオプションである場合は、以下を使用することを強くお勧めしboost::any
ます。
boost::any a(1234567);
boost::any b(12.3456);
boost::any c(12345LL);
boost::any d(true);
デザインの一部として、テンプレートやその他の一般的なプログラミング手法を使用します。
テンプレートのスターターは次のとおりです 。http ://www.cplusplus.com/doc/tutorial/templates/
boost anyを使用することをお勧めしますが、現在受け入れられている回答(依存関係を最小限に抑えたい場合)よりも設計の観点から優れていると思う代替案は、任意のタイプを受け入れて返すテンプレートラッパーの次の非常に単純な実装です。
class IAnyType {}
template <class T>
class AnyType : public IAnyType
{
private:
T value_;
public:
AnyType(T value) : value_(value) {}
void set(T value) { value_ = value; }
T get() { return value_; }
};
次に、キューにIAnyTypeオブジェクトを保持させ、すべての引数をAnyTypeオブジェクト内に格納してから、キューに追加します。さまざまな代入演算子をオーバーロードして、使用法をさらに簡単にすることで、これを少し整えることができます。
charsを使用して、ほぼすべてのものにキャストできます。単純なキャストでは「到達」できないデータ型については、memcpy()を使用することをお勧めします。