2017-02-02 5 views
0

最近、私は雑種を書こうとしました。私のコードの多くの部分では、ユーザーの入力に基づいて決定する必要がありました。インスタンスの場合、ユーザー入力8ビットまたは16ビットに基づいてバッファタイプを選択する必要がありました。私はこのコードを実装し、それは私の仕事をした:ユーザの入力に応じて1回だけ決定するエレガントな方法はありますか?

if (requestedbitsNumber == 8) 
    mxMalloc(sizeof(unsigned __int8)*NumberOfElements); 
if (requestedbitsNumber == 16) 
    mxMalloc(sizeof(unsigned __int16)*NumberOfElements); 

今、私は疑問に思っては、ユーザの入力に応じて一度だけ決定するマクロや他の人のようなものを定義するためのエレガントな方法はありますか?このようなもの:

if (requestedbitsNumber == 8) 
    #define dataType unsigned __int8 
if (requestedbitsNumber == 16) 
    #define dataType unsigned __int16 

と使用するとdatTypeが必要です。私は#defineがプリプロセッサディレクティブであり、コードがコンパイルされる前に使用されていることを知っています。 私はそれが私が何を意味するかを示すためだけに使用しました。ありがとう。

+1

データ型は、あなただけ(あなたが 'はsizeofに設定され、いくつかの' size_t'変数を持つことができ、「保存」署名されていない__intX) '(Xは正しい番号です)。あるいは、単に 'mxMalloc(requestedbitsNumber/8 * NumberOfElements);'を実行してください。 – Cornstalks

+0

バッファを作成する場所は正しいですか。しかし、特定のタイプのポインタにvoidポインタをキャストする必要があるのはどうでしょうか。 'myUin16Pointer =(unsigned __int16 *)myVoidPointer; 'のようなもの – GntS

答えて

1

template<class YourIntegerType>を使用してください。あなたが関数やクラスとしてXを実装することができ

if (requestedbitsNumber == 8) 
    X<unsigned __int8>(); 
if (requestedbitsNumber == 16) 
    X<unsigned __int16>(); 

だからあなたのような何かを書きます。


あなたはXの内側に何かを書くことができ、ポインタをキャストするには、次の

代わりの

pointerToInteger = (YourIntegerType *) myVoidPointer;

+0

提案した方法で特定のタイプのポインタにvoidポインタをキャストする方法を教えてください。 – GntS

+0

関数に引数を渡すためにポインタキャストが必要です。 'myFunction((unsigned __int16 *)myVoidPointer)'のような関数があるとします。 'X'を使ってそれをどうやって行うのですか?些細なことがあればごめんなさい。私は初心者です。 – GntS

+0

@GmtKは 'myFunction'をクラス' X'のメンバ関数として実装しています。 – cshu

関連する問題