タグ付けされた質問 「typedef」

CおよびC ++では、typedefキーワードを使用して、既知のデータ型のエイリアスを作成できます。


7
C ++ 11の「typedef」と「using」の違いは何ですか?
C ++ 11ではusing、typedefsのような型エイリアスを書き込むために使用できることを知っています。 typedef int MyInt; 私が理解していることから、これは次と同等です: using MyInt = int; そして、その新しい構文は、 " template typedef" を表現する方法を持つための努力から生まれました。 template< class T > using MyType = AnotherType< T, MyAllocatorType >; しかし、最初の2つの非テンプレートの例では、標準に他の微妙な違いがありますか?たとえば、typedefsは「弱い」方法でエイリアシングを行います。つまり、新しいタイプは作成されず、新しい名前のみが作成されます(これらの名前間の変換は暗黙的です)。 それと同じusingですか、それとも新しいタイプを生成しますか?違いはありますか?


6
Typedef関数ポインター?
StackаэтотвопросестьответынаStack Overflowнарусском:typeакработаетtypedefвэтомкоде? DLLを動的にロードする方法を学習していますが、理解できないのはこの行です typedef void (*FunctionFunc)(); 少し質問があります。誰かがそれに答えることができれば私は感謝しています。 なぜtypedef使用されるのですか? 構文は奇妙に見えます。後にvoid関数名や何かがあるべきではありませんか?匿名関数のように見えます。 関数のメモリアドレスを格納するために関数ポインタが作成されていますか? だから私は今混乱しています。わかりやすく説明してもらえますか?
459 c++  c  pointers  typedef 


1
C ++テンプレートtypedef
クラスがあります template<size_t N, size_t M> class Matrix { // .... }; サイズNおよび1のa と同等の(列ベクトル)typedefを作成するa を作成します。そのようなもの:VectorMatrix typedef Matrix<N,1> Vector<N>; コンパイルエラーが発生します。以下は似たようなものを作成しますが、正確には私が望んでいるものではありません。 template <size_t N> class Vector: public Matrix<N,1> { }; 解決策またはそれほど高価ではない回避策/それに対するベストプラクティスはありますか?
369 c++  templates  c++11  typedef 

10
C#のtypedefに相当
C#に同等のtypedefはありますか、または何らかの類似の動作を取得するにはどうすればよいですか?私はいくつかのグーグルを行いましたが、どこを見てもネガティブなようです。現在、私は次のような状況にあります。 class GenericClass<T> { public event EventHandler<EventData> MyEvent; public class EventData : EventArgs { /* snip */ } // ... snip } 現在、そのイベントのハンドラーを実装しようとするときに、これが非常に迅速に多くの入力(ひどい駄洒落の謝罪)につながる可能性があることをロケット科学者が理解する必要はありません。それは次のようなものになるでしょう: GenericClass<int> gcInt = new GenericClass<int>; gcInt.MyEvent += new EventHandler<GenericClass<int>.EventData>(gcInt_MyEvent); // ... private void gcInt_MyEvent(object sender, GenericClass<int>.EventData e) { throw new NotImplementedException(); } 私の場合を除いて、私はすでにintではなく複合型を使用していました。これを少し単純化できればいいのに... 編集:すなわち おそらく、同様の動作を得るためにEventHandlerを再定義する代わりに、EventHandlerを型定義する必要があります。
326 c#  typedef 


7
Cの関数ポインターのtypedefについて
引数を持つ関数へのポインタのtypedefを持つ他の人々のコードを読んだとき、私はいつも少し困惑してきました。少し前にCで記述された数値アルゴリズムを理解しようとすると、このような定義に取り掛かるのにしばらく時間がかかったことを思い出します。では、関数へのポインタの良いtypedefを作成する方法(することとしないこと)に関するヒントと考えを共有して、なぜそれらが役立つのか、他の人の作業をどのように理解するのかについて教えてください。ありがとう!


8
uint8_tとunsigned char
使用することの利点は何であるuint8_t以上unsigned charCには? ほとんどすべてのシステムuint8_tでのtypedefにすぎないことを知っているunsigned charので、なぜそれを使用するのですか?
231 c  typedef 

6
typedef固定長配列
24ビットのデータ型を定義する必要がありますchar[3]。型を表すために使用しています。することができます私のtypedef char[3]にtype24?コードサンプルで試してみました。typedef char[3] type24;ヘッダーファイルに入れました。コンパイラはそれについて文句を言わなかった。しかしvoid foo(type24 val) {}、Cファイルで関数を定義すると、文句を言われました。type24_to_int32(type24 val)ではなくのような関数を定義できるようにしたいと思いますtype24_to_int32(char value[3])。
210 c  arrays  gcc  typedef 

9
C ++で列挙型を宣言するときにtypedefを使用するのはなぜですか?
私は何年もC ++を書いていないので、今はそれを取り戻そうとしています。それから私はこれに遭遇し、あきらめることを考えました: typedef enum TokenType { blah1 = 0x00000000, blah2 = 0X01000000, blah3 = 0X02000000 } TokenType; これは何ですか?typedefここでキーワードが使用されているのはなぜですか?TokenTypeこの宣言で名前が2回表示されるのはなぜですか?これとセマンティクスはどのように違うのですか? enum TokenType { blah1 = 0x00000000, blah2=0x01000000, blah3=0x02000000 };
183 c++  enums  typedef 

9
C ++の内部typedefs-良いスタイルか悪いスタイルか?
私が最近頻繁に行っているのは、そのクラス内の特定のクラスに関連するtypedefを宣言することです。 class Lorem { typedef boost::shared_ptr<Lorem> ptr; typedef std::vector<Lorem::ptr> vector; // // ... // }; これらのタイプは、コードの他の場所で使用されます。 Lorem::vector lorems; Lorem::ptr lorem( new Lorem() ); lorems.push_back( lorem ); 私が好きな理由: クラステンプレートによって導入されたノイズを減らし、にstd::vector<Lorem>なりますLorem::vector。 これは意図の表明として機能します。上記の例では、Loremクラスは参照カウントboost::shared_ptrされ、ベクトルに格納されることを目的としています。 これにより、実装の変更が可能になります。つまりboost::intrusive_ptr、後の段階でLoremを(を介して)侵入参照参照に変更する必要がある場合、コードへの影響は最小限になります。 私はそれは「きれい」に見え、間違いなく読みやすいと思います。 気に入らない理由: 依存関係に問題がある場合があります-たとえば、Lorem::vector別のクラス内にを埋め込みたいが、(ヘッダーファイルに依存関係を導入するのではなく)Loremを転送宣言するだけでよい(またはしたい)場合は、最終的に明示的な型(たとえば、boost::shared_ptr<Lorem>ではなくLorem::ptr)。これは少し矛盾します。 それはあまり一般的ではないかもしれません、それゆえ理解するのは難しいですか? 私は自分のコーディングスタイルで客観的になるように努めていますので、私の考えを少し分析できるように、それについて他の意見を得ることは良いでしょう。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.