1

クラスがありNormalCalculatorます。内でNormalCalculator、 を定義しましたstruct GLpoint

プロジェクトが進むにつれて、コードの他の場所での使用法を見つけましたが、ソリューションの他の場所 (クラス外)を使用するたびGLpointに記述する必要があるのは、乱雑で画面を汚染することがわかりました。NormalCalculator::GLpointGLpoint structNormalCalculator

GLpointが に存在することをコンパイラに知らせる方法はありますNormalCalculator.hGLpoint? きっと道はあるはずです。

私はもう試した

using NormalCalculator

using NormalCalculator::GLpoint  

予想どおり、これらはNormalCalculator名前空間ではなくクラスとして機能しませんでした。

4

2 に答える 2

4

typedef を使用できます。

namespace my_ns {
typedef NormalCalculator::GLpoint GLpoint;
}

コードベースを単純にリファクタリングすることを強くお勧めしますが。コンパイラによって出力されるほとんどのエラー メッセージは、スコープで修飾された完全な型名を引き続き使用し、長い型名は実際の可読性の問題になります。

テンプレートをデバッグするために型名を出力するためによく使用する次のコードを検討してください。

struct Foo
{
  struct Bar {};
};

typedef Foo::Bar ImportedBar;

// refactored bar
struct Bar {};

template <typename> struct print;

int main()
{
  print<ImportedBar> x; // error: aggregate ‘print<Foo::Bar> x’ has incomplete type and cannot be defined
  print<Bar> y; // error: aggregate ‘print<Bar> y’ has incomplete type and cannot be defined
  return 0;
}

最初のバージョンではまだ完全な名前が出力されます。これは些細なことのように思えるかもしれませんが、これが std::vectorテンプレートのデフォルト引数などを使用した場合に何が起こるかを考えてみてください。突然、すべてのキャラクターがこれを読むのに役立ちます。

于 2012-12-12T13:34:07.117 に答える
3
typedef NormalCalculator::GLpoint GLpoint;
于 2012-12-12T13:33:16.083 に答える