函数体内的typedef是一个糟糕的编程习惯吗?

Boj*_*zec 30 c++ typedef

我有一些类,C并希望将其实例和方法的地址传递给测试函数中的某个仿函数Test_C_Foo1().Functor是一个模板类,我必须提供类method(MEMFN1)的类型作为其模板参数之一.我必须在MEMFN1某处定义类型但不想更改C.h并且不希望用它污染全局命名空间.我决定尽可能本地化typedef,所以把它放在一个测试函数中 - 在MEMFN1实际使用的范围内.在函数体内部使用typedef是一个很好的做法吗?

Standard允许在函数体内使用typedef,仅在这些特定情况下限制它:

除了类型说明符之外,typedef说明符不应在decl-specifier-seq中与任何其他类型的说明符组合,并且它不应在参数声明(8.3.5)的decl-specifier-seq中使用,也不得用于在函数定义(8.4)的decl-specifier-seq中.

这是代码片段:

CH:

...
#include <string>
...

class C
{
public:
    int foo1(const std::string&);       
};
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

jus*_*tin 52

很好.这是合法的和本地化的.

  • 这不仅仅是好事:它有时是必要的*.将`typedef`看作是一种"类型变量赋值". (6认同)