[OK]を、私はこの問題についてこことそこに多くの答えを読んだが、おそらく私は正しい構文を知らないので、これを行う方法を理解することはできません。テンプレート以外のクラスのTパラメータを持たないテンプレート
私は主に直列化と逆シリアル化のために、さまざまな静的ユーティリティ関数を実装する必要のある非テンプレートクラスを持っています。
class Data_Base : public QObject
{
...
protected:
static QByteArray Serialize(int value);
static int DeserializeInt(QByteArray ser);
static QByteArray Serialize(char *value);
static char *DeserializeCharArr(QByteArray ser);
static QByteArray Serialize(QString value);
static QString DeserializeQString(QByteArray ser);
....
}
さて、私はそれは立派になるため、テンプレートとしてすべてのDeserialize*
の機能を持っていることを好むだろう:私が現在持っていることは、このようなものです。また、ボーナスとしてSerialize
のテンプレートをテンプレートとして使用するので、実際に明示的にどのオーバーロードを呼び出すかをユーザーに強制します。この方法を使用することができます何か:
QByteArray ba = Serialize<int>(5);
...
int theValue = Deserialize<int>(ba);
は今、私は別のアプローチを試みたが、すべての機能以来、私は見つけることができませんでし一度に一つの過負荷を自動的にテンプレートを実装していないだけの例を見てこの作品を作る方法。
もちろん、これはC++であり、QTが追加されています。
あなたが探しているような言葉は、*特化*で、過負荷ではありません。 * C++テンプレートのスペシャリゼーション*を検索してください。 –
テンプレートは、各タイプのコードが同じ場合に便利です。あなたの関数がデータ構造に応じて異なる場合は、スマート関数のオーバーロードが最適な解決策です。 –
1つの中の何かを変更することで、すべてを変更するようなことが集中している場合、extern関数を呼び出すのはどうですか?静的QByteArray Serialize(int value){return extern_serialize(value);}おそらくextern関数を友人にすることと組み合わせると、 –
Aziuth