2012-11-17 73 views
0

有沒有方法使用另一種方法中的函數定義常量?#define從另一種方法定義常量使用函數和#define

例如,我在文件Foo.cpp中返回一個int的方法:

int foo() { return 2; } 

在我bar.cpp,我希望能有像

#define aConstant foo() 

是否有可能?有沒有辦法做到這一點?

(我使用Visual Studio 2010)

編輯:因爲我使用VS 2010,所以任何其他的想法constexpr不起作用?

+1

你讀過關於extern的關鍵字嗎?這可能有一個解決方案 –

+2

我不是說這是最好的方法,但你甚至嘗試過嗎? http://ideone.com/XYGPmA – chris

+2

看看'constexpr'? – Pubby

回答

2

讓它

constexpr int foo() { return 2; } 

然後在其他單元

static constexpr int aConstant = foo(); 
+0

在visual studio 2010中做這個工作嗎? – Chin

+0

否:-([此表](http://wiki.apache.org/stdcxx/C++xxCompilerSupport)(來自Apache Stdcxx項目)表示Visual Studio(MSVC)尚不支持它(檢查第7個line) – olibre

+0

噢,對不起,我的虛擬機可用,因爲目前破壞的PC。 – sehe

1

有沒有什麼本質上錯在命名空間內說static int const a = bar();在你的代碼的任何地方。這只是,除非barconstexpr,初始化將發生在動態初始化階段。這可能會導致某些訂購問題,但它本身不會被破壞,隨後使用a將會如您所想的那樣高效。

或者你可以把功能的宏:

#define TIMESTWO(n) (n * 2) 
1

不幸的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()要好得多。

+0

你能指定哪個cpp文件和foo和bar的哪個頭文件嗎? – Chin

+0

al-right @Chin Chhers ;-) – olibre

+0

所以它會以某種方式解決我的問題在這裏http://stackoverflow.com/questions/13435235/const-in-template-argument,即傳遞一個變量到一個模板? – Chin

相關問題