Sorry, two more questions
Code:
#ifndef PERFECTSIM_PARSER
#define PERFECTSIM_PARSER
#include <string>
#include <d3dx9.h>
#include <sstream>
#include <iostream>
#include "tinyxml\tinyxml.h"
using namespace std;
template<class T>
class GetValue
{
protected:
virtual T get(TiXmlNode* pParent);
virtual T get_attribs(TiXmlNode* pParent) = 0;
};
class GetVector3 : public GetValue<D3DXVECTOR3>
{
public:
virtual D3DXVECTOR3 get(TiXmlNode* pParent);
virtual D3DXVECTOR3 get_attribs(TiXmlElement *element);
D3DXVECTOR3 get_vector3(TiXmlElement *element);
};
template<class T>
T GetValue<T>::get(TiXmlNode* pParent)
{
T attr;
if ( !pParent ) return attr;
TiXmlNode* pChild;
TiXmlText* pText;
int t = pParent->Type();
switch ( t )
{
case TiXmlNode::TINYXML_DOCUMENT:
break;
case TiXmlNode::TINYXML_ELEMENT:
attr =get_attribs(pParent->ToElement());
break;
case TiXmlNode::TINYXML_COMMENT:
break;
case TiXmlNode::TINYXML_UNKNOWN:
break;
case TiXmlNode::TINYXML_TEXT:
pText = pParent->ToText();
break;
case TiXmlNode::TINYXML_DECLARATION:
break;
default:
break;
}
for ( pChild = pParent->FirstChild(); pChild != 0; pChild = pChild->NextSibling())
{
get( pChild );
}
return attr;
}
#endif
Code:
// tutorial demo program
#include "stdafx.h"
#include "Parser.h"
/////////////////////////////////////
///
D3DXVECTOR3 GetVector3::get(TiXmlNode* pNode)
{
return GetValue::get(pNode);
}
D3DXVECTOR3 GetVector3::get_vector3(TiXmlElement* pElement)
{
return get_attribs(pElement);
}
D3DXVECTOR3 GetVector3::get_attribs(TiXmlElement* pElement)
{
if ( !pElement ) return D3DXVECTOR3();
GetValue::get(pElement);
D3DXVECTOR3 v;
pElement->QueryFloatAttribute("X", &v.x);
pElement->QueryFloatAttribute("Y", &v.y);
pElement->QueryFloatAttribute("Z", &v.z);
return v;
}
1) Can't instantiate abstract class of GetVector3.
2) Don't you think the coding is very redundant ?
Any help please?
Thanks
Jack