UWAGA: To pytanie jest tylko luźno związane z tinyxml, jednak takie szczegóły mogą pomóc lepiej zilustrować tę koncepcję.Specjalizacja szablonu funkcji w innej klasie/przestrzeni nazw?
Napisałem szablon funkcji, który będzie iterować przez nadrzędne węzły XML węzłów XML, pobrać wartość elementu podrzędnego, a następnie przesłać tę wartość elementu potomnego do wektora.
The „pobrać wartość” część jest również zapisana jako szablon funkcji:
tj
template <typename Type>
Type getXmlCollectionItem(
const char* elementName, TiXmlNode* child, TiXmlNode* parent);
Są specjalizacje do odzyskiwania części, do powrotu różne rodzaje wartości, na przykład element podrzędny std :: string i inne niestandardowe obiekty.
tj
template <>
std::string getXmlCollectionItem<std::string>(
const char* elementName, TiXmlNode* child, TiXmlNode* parent);
template <>
MyObject getXmlCollectionItem<MyObject>(
const char* elementName, TiXmlNode* child, TiXmlNode* parent);
To wszystko działa doskonale, jednak uderzyło mnie, że byłoby to bardzo przydatne w udostępnionej biblioteki funkcji gdy ma do czynienia z plikami TinyXML.
Pytanie: Czy można zadeklarować szablon funkcji w jednym obszarze nazw, np. namespace UtilityFunctions
, która nie ma żadnej wiedzy na temat konkretnych typów obiektów, takich jak 'MyObject'
, a następnie deklaruje i definiuje specjalizacje tego szablonu funkcji w innych obszarach nazw, które mają wiedzę na temat określonych typów obiektów, takich jak 'MyObject'
?
Moje przeczucie polega na tym, że nie jest to możliwe, ale koncepcja posiadania wspólnego szablonu funkcji wydaje mi się wystarczająco przydatna, aby znaleźć alternatywny sposób zbliżenia się do funkcjonalności, której szukam. ..
Przeprasza, jeśli któraś z terminów jest niepoprawna lub wyjaśnienie jest niejasne. Zrobiłem dużo badań wokół tego tematu (aby przejść do punktu pracy nad specjalizacją szablonu funkcji w obrębie tej samej przestrzeni nazw), ale nie znalazłem jeszcze ostatecznej odpowiedzi.
Można po prostu użyć przeciążenia funkcji ... Zwrócić bool lub kod błędu i przekazać parametr out przez odniesienie. – AJG85
Tak, to byłoby o wiele łatwiejsze :) –
[Ten artykuł autorstwa Herb Sutter] (http://www.gotw.ca/publications/mill17.htm) na temat specjalizacji funkcji może cię kołysać ;-) – AJG85