テンプレートクラスをヘッダーと実装ファイルに分割するときにタイプエイリアスを使用する

ジョンスミス

.hppファイルに分割されたテンプレートクラスと、.ippかなり長い型が含まれているクラスがありますリファクタリング中に、コードをより読みやすくするために、その型の型エイリアスを記述したかったのです。しかし、私が何をしても、.ippファイルで認識される型エイリアスを取得できません

これが私がやろうとしていることの簡単な例です:

container.hpp:

template <class T>
class container {
public:
    using TypeAlias = T;
    container(const TypeAlias& a);
    const TypeAlias& getA() const;
private:
    TypeAlias a;
};

#include "container.ipp"

container.ipp:

template <class T>
container<T>::container(const TypeAlias& a) : a(a)
{

}

template <class T>
const TypeAlias& container<T>::getA() const
{
    return this->a;
}

これをコンパイルすると、次のエラーが発生します。

./container.ipp:8:7: error: unknown type name 'TypeAlias'
const TypeAlias& container<T>::getA() const

明らかにこの場合、紹介することはあまり意味がありませんTypeAliasが、私の実際のプログラムでは、それは大きな違いを生む可能性があります。TypeAliasを.ippファイルで使用できるようにするためにできることはありますか?

aschepler

のようcontainer<T>::getAクラスメンバーを定義すると、メンバーの名前(getAここ)の後のものはクラスのスコープで検索されますが、それより前のものは検索されません。基本的に、コンパイラーが順番に物事を理解しようとするとconst TypeAlias&宣言がで始まるとき、それがcontainer<T>TypeAliasを意味するのかを理解するために内部調べる必要があることをまだ知りません

したがって、通常の関数構文を使用して、それがTypeAliasメンバータイプであることを指定する必要があります

template <class T>
const typename container<T>::TypeAlias& container<T>::getA() const
{
    return this->a;
}

ただし、これは「トレーリングリターンタイプ」構文の利点の1つです(C ++ 11以降で有効)。順序を変更するだけで、リターンタイプ内のクラスのメンバーをより簡単に使用できます。

template <class T>
auto container<T>::getA() const -> const TypeAlias&
{
    return this->a;
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ヘッダーで定義されたテンプレート化された関数とクラスを実装するときに、なぜ「tpp」ファイルを使用するのですか?

分類Dev

スクリプト出力をファイルにリダイレクトするときにtputエスケープシーケンスを防止する

分類Dev

シミュレーターで正常に動作しているときにデバイスにアプリをインストールすると、「ブリッジヘッダーのインポートにエラーが発生しました」

分類Dev

グリッドレイアウト+ブートストラップ+テーブルオーバーフローを使用するときにヘッダー/フッターの位置を維持する

分類Dev

アダプターと配列リストを使用する場合、リサイクルビューのアイテムにクリックリスナークラスを実装する必要があります

分類Dev

ファイルをアップロードするときに「進行状況」と更新イベントをajaxリクエストにバインドする方法

分類Dev

Rails 5:アプリケーションテンプレートスクリプトにフォルダーとファイルを追加する方法

分類Dev

テキストファイルをクリーンアップし、Pythonでパンダデータフレームとしてインポートする

分類Dev

Azureパイプラインを使用してVisualStudioでクラウドサービス(ccproj)プロジェクトをビルドするときに、エラー「ファイル形式ヘッダーが見つかりません」

分類Dev

POSTを使用してFlaskアプリケーションにファイルをアップロードするときの308リダイレクト

分類Dev

プリフライトリクエストを実行するときにAccess-Control-Allow-OriginCORSヘッダーが必要ですか?

分類Dev

プリフライトリクエストを実行するときにAccess-Control-Allow-OriginCORSヘッダーが必要ですか?

分類Dev

インデックスがクリックされたときにパラメータをテンプレートファイルに渡す

分類Dev

ヘッダーでリダイレクトするときに div にスタイルを与える

分類Dev

mrcpyをmmapされたファイルに使用するときのバスエラー(コアダンプ)

分類Dev

出力をバックグラウンドでファイルにリダイレクトするときのforループの構文エラー

分類Dev

再修正:ファイルをコピーし、Promiseチェーンを使用してデータベースにクエリを実行するとソケットハングアップエラーが発生する

分類Dev

シングルステップでターゲットを構築するときにヘッダーをプリコンパイルする方法は?

分類Dev

エンドレススクロールを実行するときに追加のアイテムをリクエストするタイミング

分類Dev

Unity(5.5)プラグインがWindowsアプリケーションファイル(EXE)をエクスポートするときにSQLiteデータベースエラーを使用する

分類Dev

迅速にクラスファイルにアクセスするときのコンテキストクロージャタイプエラー

分類Dev

iframeを使用してファイルをアップロードするときにリクエストヘッダーを追加するにはどうすればよいですか?

分類Dev

std :: tuple <...>上にmap()とeach()を実装する-テンプレートパラメーターとしてfunctorにインデックスを渡す

分類Dev

jgitflow Mavenプラグインを使用してリリースを終了するときにプロファイルをアクティブ化しますか?

分類Dev

ファイルをアップロードしようとしたときにタイムアウトをリクエストする

分類Dev

ネットワークインターフェイスタイプの検出に到達可能性フレームワークを使用しているときに、iOS(クロスプラットフォームC ++ライブラリソリューション)でエラーをビルドする

分類Dev

Visual StudioでQtアプリケーションをテストする-テストファイルにプロジェクトファイルを含めると、「ソースファイルを開くことができません」というエラーが表示されるQtファイル

分類Dev

C ++-内部テンプレートクラスのテンプレートメソッドを別のファイルに実装する

分類Dev

Piglatinを使用してテキストファイルをロードしているときにヘッダーをスキップする

Related 関連記事

  1. 1

    ヘッダーで定義されたテンプレート化された関数とクラスを実装するときに、なぜ「tpp」ファイルを使用するのですか?

  2. 2

    スクリプト出力をファイルにリダイレクトするときにtputエスケープシーケンスを防止する

  3. 3

    シミュレーターで正常に動作しているときにデバイスにアプリをインストールすると、「ブリッジヘッダーのインポートにエラーが発生しました」

  4. 4

    グリッドレイアウト+ブートストラップ+テーブルオーバーフローを使用するときにヘッダー/フッターの位置を維持する

  5. 5

    アダプターと配列リストを使用する場合、リサイクルビューのアイテムにクリックリスナークラスを実装する必要があります

  6. 6

    ファイルをアップロードするときに「進行状況」と更新イベントをajaxリクエストにバインドする方法

  7. 7

    Rails 5:アプリケーションテンプレートスクリプトにフォルダーとファイルを追加する方法

  8. 8

    テキストファイルをクリーンアップし、Pythonでパンダデータフレームとしてインポートする

  9. 9

    Azureパイプラインを使用してVisualStudioでクラウドサービス(ccproj)プロジェクトをビルドするときに、エラー「ファイル形式ヘッダーが見つかりません」

  10. 10

    POSTを使用してFlaskアプリケーションにファイルをアップロードするときの308リダイレクト

  11. 11

    プリフライトリクエストを実行するときにAccess-Control-Allow-OriginCORSヘッダーが必要ですか?

  12. 12

    プリフライトリクエストを実行するときにAccess-Control-Allow-OriginCORSヘッダーが必要ですか?

  13. 13

    インデックスがクリックされたときにパラメータをテンプレートファイルに渡す

  14. 14

    ヘッダーでリダイレクトするときに div にスタイルを与える

  15. 15

    mrcpyをmmapされたファイルに使用するときのバスエラー(コアダンプ)

  16. 16

    出力をバックグラウンドでファイルにリダイレクトするときのforループの構文エラー

  17. 17

    再修正:ファイルをコピーし、Promiseチェーンを使用してデータベースにクエリを実行するとソケットハングアップエラーが発生する

  18. 18

    シングルステップでターゲットを構築するときにヘッダーをプリコンパイルする方法は?

  19. 19

    エンドレススクロールを実行するときに追加のアイテムをリクエストするタイミング

  20. 20

    Unity(5.5)プラグインがWindowsアプリケーションファイル(EXE)をエクスポートするときにSQLiteデータベースエラーを使用する

  21. 21

    迅速にクラスファイルにアクセスするときのコンテキストクロージャタイプエラー

  22. 22

    iframeを使用してファイルをアップロードするときにリクエストヘッダーを追加するにはどうすればよいですか?

  23. 23

    std :: tuple <...>上にmap()とeach()を実装する-テンプレートパラメーターとしてfunctorにインデックスを渡す

  24. 24

    jgitflow Mavenプラグインを使用してリリースを終了するときにプロファイルをアクティブ化しますか?

  25. 25

    ファイルをアップロードしようとしたときにタイムアウトをリクエストする

  26. 26

    ネットワークインターフェイスタイプの検出に到達可能性フレームワークを使用しているときに、iOS(クロスプラットフォームC ++ライブラリソリューション)でエラーをビルドする

  27. 27

    Visual StudioでQtアプリケーションをテストする-テストファイルにプロジェクトファイルを含めると、「ソースファイルを開くことができません」というエラーが表示されるQtファイル

  28. 28

    C ++-内部テンプレートクラスのテンプレートメソッドを別のファイルに実装する

  29. 29

    Piglatinを使用してテキストファイルをロードしているときにヘッダーをスキップする

ホットタグ

アーカイブ