Jedną z (tak bardzo wielu) niefortunnych wad projektowych C++ jest to, że zasadniczo nie można oddzielić implementacji od interfejsu podczas korzystania z metaprogramowania szablonów.Ukrywanie szczegółów implementacji szablonu z Doxygen
całej mojej bibliotece mam rzeczy jak:
template <typename Ma, typename Mb>
typename boost::enable_if_c<
detail::IsMatrix<Ma>::val and detail::IsMatrix<Mb>::val and
detail::MatrixDimensionCheck<Ma,Mb>::isStaticMatch,
bool>::type
operator==(const Ma &a, const Mb &b) {
return detail::matrixEqual(a,b);
}
Jeśli jest nieczytelny, nie winię cię. Większość tego bałaganu polega po prostu na określeniu typu zwracanego, który ma być bool
, jeśli argumenty są macierzami i dopasowanym wymiarem, i są niezdefiniowane, jeśli są czymś innym (w ten sposób polegają na SFINAE, aby uniemożliwić temu operatorowi ukrywanie innych ważnych rzeczy).
Odkąd istota, która jest zasadniczo statyczną funkcją sprawdzania typu , funkcja jest teraz wbudowana w sygnaturę mojej zwykłej funkcji C++, te odwzorowania implementacji pojawią się w wygenerowanej dokumentacji.
Nie chcę, aby użytkownik musiał to przeczytać. Wszystko, co muszą wiedzieć, to ta funkcja zwraca bool
(co jest prawie niemożliwe do odczytania przez przeczytanie powyższego). W dokumentach mogę wyjaśnić zwięźle, w prostym języku angielskim, że ten operator akceptuje tylko matryce.
Czy istnieje sposób, aby przekonać Doxygen do renderowania tego typu bałaganu jako bool
? (Przypuszczam, że nie ma sposobu, żeby to oczyścić bezpośrednio z kodu, ale pomysły są mile widziane, jeśli coś wymyślisz).
Istnieją powody, dlaczego wolę odręczny dokumentację Over „automatycznie wygenerowanego” dokumentacji. Niemal zawsze spędzam więcej czasu na konfigurowaniu systemu dokumentacji/naprawieniu go, aby był akceptowalny, podczas gdy w międzyczasie mogłem już napisać całą dokumentację w faktycznym, ładnym formacie. – orlp
@noccracker: Do czasu, gdy zmienisz cokolwiek, takie jak parametry, funkcje, itp., Bez aktualizacji dokumentacji. Potem staje się niezsynchronizowany i staje się gorszy niż bezużyteczny. Doxygen wspiera również dobrze napisaną dokumentację. –
Może być powiązane z tym pytaniem (http://stackoverflow.com/questions/3435225/c-meta-programming-doxygen-documentation). – elemakil