0
初心者はC++で、char型またはint型を含む追加テンプレートを作成しようとしています。その後、入力データのパディングに応じて、このテンプレートを他のテンプレートで使用してデータのタイプを選択したいと考えています。テンプレートの特殊化の中でtypedefを使用する
template <bool isPadding>
class PaddingTemplate;
template <>
class PaddingTemplate<false>
{
public:
typedef char Type;
};
template <>
class PaddingTemplate<true>
{
public:
typedef int Type;
};
template <class T, bool Padding = ((sizeof(T) % sizeof(int)) == 0)>
class ObjectComparator
{
private:
typedef PaddingTemplate<Padding> PaddingTrick;
typename PaddingTrick::Type DataType;
DataType Shadow[sizeof(T)/sizeof(DataType)];
};
私はこのコンパイラエラーの問題を解決し、データパディングに応じて、データ型の選択を自動化する方法
を取得しますか?
ありがとうございました!出来た! typenameとtypedefの組み合わせがこのコードでどのように機能するかをもっと説明できますか? – Ilia
@Iliaのすべての 'typename'は、あなたが探している従属名が型であることを意味します:それは値でもテンプレートでもあります。 'typename Class :: type data'を使うと、その型のオブジェクトを構築したいということです。 'typedef typename Class :: type type'はエイリアスが必要であることを意味します。 なぜ 'typename'が必要なのか、これは素晴らしい答えです: https://stackoverflow.com/a/8584507/4131059 –
すごいプログラミング言語С++!おかげさまで、ロシアの大きな挨拶に感謝します。 – Ilia