2014-02-27 55 views
0

我想組合我的數學函數。我的數學函數包括許多數學函數,包括「math.h」中的函數和一些常數值。它們不在類或名稱空間中。由於性能原因,它們都被內聯。但是如果不是可能的命名空間,我希望他們在一個類中分組。我只是想用我這樣的功能:類中的靜態內聯函數

MyMath::Pow(2, 2); 
MayMath::PI; 

所以我的問題是;如果我可以使用類,函數和值必須是靜態的,但我認爲,但靜態方法不能內聯,因爲我知道。如果找不到解決方案,我可以使用「MyMath」作爲名稱空間。

+0

爲什麼靜態方法在類定義內部定義時不能內聯? – Medinoc

+0

我知道靜態修飾符不允許任何其他修飾符。我錯了嗎? –

+2

你對使用名稱空間的理由是什麼? – Nabla

回答

3

這聽起來像是XY Problem

您試圖在類內部放置獨立函數(不屬於類) - 大概是因爲您是來自另一種不允許您編寫獨立函數的面嚮對象語言。

要編寫包含功能的數學庫,如pow,exp,log等,請創建名稱空間MyMath並定義函數。沒有必要上課。

+0

「大概是因爲你是來自另一種不允許你編寫獨立函數的面嚮對象語言」是的,這是事實。 –

+0

順便說一句我不認爲,但是有名稱空間複雜性的任何性能損失。在n1 :: foo()和n1 :: n2 :: n3 :: foo()之間? –

+1

@CahitBurakKüçüksütcü只需輸入的量就能完成。 –

1

but static methods can not be inlined since I know

這不是真的,靜態方法也可以內聯。

2

靜態函數/方法也可以內聯。

在類中定義的方法默認是內聯的。

1

靜態函數可以與所有其他函數一樣內聯。但是,對於您的用例命名空間是更好的解決方案。

0

static inline是完全有效的。

如果存儲類是extern,則標識符具有外部鍵和內聯定義還提供了外部定義。

如果存儲類是靜態的,所述標識符具有內部鍵和內聯的定義是在其他的翻譯單元不可見的。

事實上,這是難得的使用inlinestatic不同的存儲類。