Mam pewną klasę C
i chcę przekazać adres jej instancji i metody do jakiegoś funktora w funkcji testowej Test_C_Foo1()
. Funktor jest klasą szablonów i muszę podać typ metody klasy (MEMFN1
) jako jeden z parametrów szablonu. Muszę zdefiniować typ MEMFN1
gdzieś, ale nie chcę zmieniać C.h
i nie chcę go zanieczyszczać globalną przestrzenią nazw. Zdecydowałem się zlokalizować typedef tak bardzo, jak to tylko możliwe, więc umieść go wewnątrz funkcji testowej - w zakresie, w którym jest faktycznie używany MEMFN1
. Czy używanie metody typedef w treści funkcji jest dobrą praktyką?Czy typedef w treści funkcji jest złą praktyką programowania?
standardowe umożliwia zastosowanie typedef wewnątrz ciała funkcji, ograniczając jedynie w tych szczególnych przypadkach:
typedef specyfikator nie są połączone w dekl-specyfikatora-nast z każdym innym rodzajem specyfikator, z wyjątkiem specyfikatora typu, i nie powinien on być używany w parametrze DekL-specyfikator-seq deklaracji parametru (8.3.5) ani w specyfikacji deklinowania-seq definicji funkcji (8.4).
Oto fragment kodu:
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;
}
To jest po prostu w porządku. – Mat
Faceci, dziękuję za odpowiedzi. Zawężenie zakresu * typedef * w tym przypadku wydawało mi się naturalnym wyborem i miałem wątpliwości tylko dlatego, że nie pamiętałem, czy kiedykolwiek natknąłem się na to w kodzie lub literaturze. –
Czy możesz użyć 'decltype' z C++ 11? –