1

例を通して質問をよりよく形成します。

Qtcpsocket次の方法のデフォルトの実装を拡張したいと思います。

class NumberedTcpSocket : public QTcpSocket
{
Q_OBJECT
public:
    NumberedTcpSocket(QObject *parent=0);
    int number;
};

ここで行っているのはint number、QTcpSocket の既定の実装にフィールドを追加することだけです。開いているソケットを列挙するには、これが必要です。

ただし、残りのネットワーキング クラスはQtcpsocket. 私が行った変更が小さいことは問題ではありません。

私はこのようなことをしたいと思います:

NumberedTcpSocket *clientConnection = returnsPointerToQTcpSocket();
clientConnection->number = predefined_number;

この場合、どのようなキャスティングを行う必要がありますか? のコンストラクターに変更が含まれていNumberedTcpSocketますか?

4

2 に答える 2

2

あなたの質問から明らかでないのは、あなたがソケットオブジェクトを作成しているのかどうかです。で構築されている場合は、を使用してnew NumberedTcpSocket()キャストできます。そうでなければ、それは ではなく、それを 1 つとして扱うことはできません。QTcpSocketdynamic_castNumberedTcpSocket

別の方法として、番号をソケットに関連付けるだけでよい場合は、サブクラスを作成せずにQObject動的プロパティ システムを使用することもできます。つまり、 で番号を設定しclientConnection->setProperty("number", predefined_number);、 で取得できますclientConnection->property("number").toInt();。しかし、あなたが達成しようとしていることについての詳細がなければ、アドバイスするのは難しい.

于 2013-10-23T13:04:31.747 に答える