我明白當你在一個頭文件中放入一個using
聲明時可能會遇到的麻煩,所以我不想那樣做。相反,我試圖將using
(或namespace foo =
)放在類聲明中,以減少頭文件中的重複輸入。不幸的是我得到編譯器錯誤看起來這將是一個有用的功能。爲什麼我不能在類聲明中使用「使用」聲明?
#ifndef FOO_H
#define FOO_H
// This include defines types in namespace gee::whiz::abc::def,
// such as the class Hello.
#include "file_from_another_namespace.h"
// using namespace gee::whiz::abc::def; // BAD!
namespace x {
namespace y {
namespace z {
struct Foo {
using namespace gee::whiz::abc::def; // Illegal.
namespace other = gee::whiz::abc::def; // Illegal.
// Foo(gee::whiz::abc::def::Hello &hello); // annoyingly long-winded
Foo(other::Hello &hello); // better
//...
};
} } } // end x::y::z namespace
#endif // FOO_H
在實際的代碼,命名空間名稱是更長的時間,惱人的,它不是東西,我可以改變。
任何人都可以解釋爲什麼這是不合法的,或(更好),如果有一個解決方法嗎?
這仍然會污染他正試圖避免的命名空間。 – Trent 2010-01-25 19:22:37
如果在類聲明中使用它,則不適用。 – 2010-01-25 19:25:43
是的,工作!如果我使它成爲一個私人的typedef,那麼其他代碼不會意外地使用它。 – Dan 2010-01-25 19:32:19