У меня есть класс C
и хочу передать адрес его экземпляра и метода некоторому функтору в тестовой функции Test_C_Foo1()
. Functor - это класс шаблона, и я должен указать тип метода класса (MEMFN1
) как один из его параметров шаблона. Я должен определить тип MEMFN1
где-то, но не хочу изменять C.h
и не хочу загрязнять им глобальное пространство имен. Я решил как можно больше локализовать typedef, поэтому поставьте его внутри тестовой функции - в пределах области, где фактически используется MEMFN1
. Является ли использование typedef внутри тела функции хорошей практикой?
Стандарт позволяет использовать typedef внутри тела функции, ограничивая его только в этих конкретных случаях:
Спецификатор typedef не должен объединяться в spec-specifier-seq с любым другим типом спецификатора, кроме спецификатора типа, и он должен не используется в описании-спецификаторе-seq объявления параметра (8.3.5) или в определении-спецификаторе-seq определения функции (8.4).
Здесь фрагмент кода:
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;
}