有沒有方法使用另一種方法中的函數定義常量?#define
?從另一種方法定義常量使用函數和#define
例如,我在文件Foo.cpp中返回一個int的方法:
int foo() { return 2; }
在我bar.cpp,我希望能有像
#define aConstant foo()
是否有可能?有沒有辦法做到這一點?
(我使用Visual Studio 2010)
編輯:因爲我使用VS 2010,所以任何其他的想法constexpr
不起作用?
有沒有方法使用另一種方法中的函數定義常量?#define
?從另一種方法定義常量使用函數和#define
例如,我在文件Foo.cpp中返回一個int的方法:
int foo() { return 2; }
在我bar.cpp,我希望能有像
#define aConstant foo()
是否有可能?有沒有辦法做到這一點?
(我使用Visual Studio 2010)
編輯:因爲我使用VS 2010,所以任何其他的想法constexpr
不起作用?
有沒有什麼本質上錯在命名空間內說static int const a = bar();
在你的代碼的任何地方。這只是,除非bar
是constexpr
,初始化將發生在動態初始化階段。這可能會導致某些訂購問題,但它本身不會被破壞,隨後使用a
將會如您所想的那樣高效。
或者你可以把功能的宏:
#define TIMESTWO(n) (n * 2)
不幸的Visual C++ 2010不支持C++ 11帶來了,你可以看到它在this table(來自Apache Stdcxx項目)功能constexpr
: MSVC(MicroSoft Visual Studio C/C++編譯器)還不支持它(檢查第7行)。
但是你仍然可以保持foo.cpp
文件你foo()
身體和使用中間的全局變量:
inline int foo() { return 2; }
const int aConstant = foo();
然後在bar.cpp
文件:
extern const int aConstant;
void bar()
{
int a = 5 * aConstant;
}
如果已經配置的Visual C++允許內聯(這是默認值),那麼aConstant
將在編譯時初始化。否則,將調用foo()
在運行時初始化aConstant
,但在啓動時(在調用main()
函數之前)。所以這比每次使用const
返回值時調用foo()
要好得多。
你讀過關於extern的關鍵字嗎?這可能有一個解決方案 –
我不是說這是最好的方法,但你甚至嘗試過嗎? http://ideone.com/XYGPmA – chris
看看'constexpr'? – Pubby