我有一些類C
,並希望將其實例和方法的地址傳遞給測試函數Test_C_Foo1()
中的某個函子。 Functor是一個模板類,我必須提供類方法(MEMFN1
)作爲其模板參數之一。我必須在某處定義MEMFN1
類型,但不想更改C.h
,並且不想用它污染全局名稱空間。我決定將typedef儘可能地本地化,以便將其放入測試函數中 - 在MEMFN1
實際使用的範圍內。 在函數體內使用typedef是一種很好的做法嗎?在函數體內的typedef是不好的編程習慣嗎?
標準允許使用的typedef在函數體內,限制它只能在這些特殊情況下:
的類型定義符不得在DECL說明符-SEQ 與任何其他種類的結合除了類型說明符以外,不應在參數聲明 (8.3.5)的decl-specifier-seq中使用,也不應在函數定義(8.4)的decl-specifier-seq中使用。
下面的代碼片段:
C.h:
...
#include <string>
...
class C
{
public:
int foo1(const std::string&);
};
main.cpp中:
...
#include "C.h"
...
void Test_C_Foo1()
{
typedef int(C::*MEMFN1)(const std::string&);
C c;
Functor1<C, MEMFN1,...> f1(&c, &C1::foo1,...);
...
}
...
int main()
{
Test_C_Foo1();
return 0;
}
這只是罰款。 – Mat 2012-04-11 09:41:31
夥計們,謝謝你的回答。在這種情況下,縮小* typedef *的範圍似乎是我自然的選擇,而且我懷疑只是因爲我不記得是否曾經在代碼或文獻中遇到過它。 – 2012-04-11 09:53:06
你可以在C++ 11中使用'decltype'嗎? – 2012-04-11 11:06:33