私はいくつかのクラスを持っていてC
、そのインスタンスとメソッドのアドレスをテスト関数のいくつかのファンクターに渡したいと思っていますTest_C_Foo1()
。MEMFN1
Functorはテンプレートクラスであり、そのテンプレートパラメータの1つとしてクラスメソッド()の型を指定する必要があります。MEMFN1
タイプをどこかで定義する必要がありますが、変更C.h
したくないし、グローバル名前空間を汚染したくないです。typedefを可能な限りローカライズすることにしたので、MEMFN1
実際に使用されるスコープ内のtest-function内に配置します。関数本体内でtypedefを使用することは良い習慣ですか?
Standardでは、関数本体内でtypedefを使用でき、次の特定の場合にのみ制限されます。
typedef指定子は、decl-specifier-seqで、type-specifierを除く他の種類の指定子と組み合わせてはならず、parameter-declaration(8.3.5)のdecl-specifier-seqで使用してはなりません。関数定義のdecl-specifier-seq(8.4)。
コードスニペットは次のとおりです。
Ch:
...
#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;
}