У меня есть класс C
и вы хотите передать адрес его экземпляра и метода некоторому функтору в тестовой функции Test_C_Foo1()
. Functor - это класс шаблона, и я должен указать тип метода класса (MEMFN1
) как один из его параметров шаблона. Я должен определить тип MEMFN1
где-нибудь, но не хочу изменять C.h
и не хочу загрязнять им глобальное пространство имен. Я решил локализовать typedef как можно больше, поэтому поставьте его внутри тестовой функции - в пределах области, где фактически используется MEMFN1
. Является ли использование typedef внутри тела функции хорошей практикой?Является ли typedef внутри тела функции плохой практикой программирования?
Стандарт позволяет использовать ЬурейеЕ внутри тела функции, ограничивая его только в этих конкретных случаях:
ЬурейеЕ спецификатор не должны быть объединены в ДЕЦЛ спецификатора-сл с любым другим видом спецификатор, за исключением спецификатора типа, и он должен не использовать в описании-спецификаторе-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;
}
Это просто прекрасно. – Mat
Ребята, спасибо за ваши ответы. Сужение сферы * typedef * в этом случае показалось мне естественным выбором, и я сомневался только в том, что не мог вспомнить, встречался ли я когда-либо в коде или литературе. –
Не могли бы вы использовать 'decltype' с C++ 11? –