假设我在头文件中定义了如下嵌套类:
class ClassA
{
private:
class ClassB
{
private:
int member_b;
public:
void function_name();
};
};
为了在外部.cpp文件中给函数“function_name()”定义,我必须像这样访问它:
void ClassA::ClassB::function_name()
{
std::cout << member_b;
return;
}
为了这个例子,请不要问为什么我使用嵌套类;我有理由在我的实际项目中这样做。但是,我的问题是这个; 是否有可能以某种方式将实现文件中的 ClassA::ClassB::function_name()
缩短为 short::function_name()
,同时仍保持嵌套的类?我不认为typedef或新的命名空间定义可以帮助我,但也许我错了。
答案 0 :(得分:1)
限定类型名称允许您定义typedef以表示限定类名。然后,您可以将typedef与::(scope resolution)运算符一起使用来引用嵌套类或类成员,如以下示例所示:
class outside
{
public:
class nested
{
public:
static int x;
static int y;
int f();
int g();
};
};
int outside::nested::x = 5;
int outside::nested::f() { return 0; };
typedef outside::nested outnest; // define a typedef
int outnest::y = 10; // use typedef with ::
int outnest::g() { return 0; };
但是,使用typedef表示嵌套的类名会隐藏信息,并可能使代码更难理解。
答案 1 :(得分:0)
您是否尝试过使用别名?
// C++11
using fmtfl = std::ios_base::fmtflags;
// C++03 equivalent:
// typedef std::ios_base::fmtflags fmtfl;
fmtfl fl_orig = std::cout.flags();
fmtfl fl_hex = (fl_orig & ~std::cout.basefield) | std::cout.showbase | std::cout.hex;
// ...
std::cout.flags(fl_hex);