1

我有一堂课NormalCalculator。在 内NormalCalculator,我定义了一个struct GLpoint.

随着我的项目的进展,我在我的代码中找到了其他地方的用途GLpoint,但是我发现NormalCalculator::GLpoint每次我希望在课堂GLpoint struct之外的解决方案中使用其他地方时都必须编写不整洁和屏幕污染。NormalCalculator

有什么方法可以让编译器知道它GLpoint存在于 中NormalCalculator.h,并让我将其称为GLpoint?我很确定应该有办法。

我试过了

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 回答