मैं here की तरह कोड लिखने की कोशिश कर रहा हूँ, लेकिन सी ++ 11 सुविधाओं का उपयोग कर, बूस्ट के बिना।सशर्त संकलन करने के लिए आप प्रकार के लक्षणों का उपयोग कैसे करते हैं?
this example से काम करते हुए, मैंने response_trait
को परिभाषित करने की कोशिश की, और विशेषता के परिणाम पर बेस सशर्त संकलन। मै इसे काम मे कैसे ले सकता हूँ?
#include <vector>
using namespace std ;
struct Vector{ float x,y,z ; } ;
struct Vertex { Vector pos ; } ;
struct VertexN { Vector pos, normal ; } ;
struct Matrix {} ;
template <typename T>
struct response_trait {
static bool const has_normal = false;
} ;
template <>
struct response_trait<VertexN> {
static bool const has_normal = true;
} ;
template <typename T>
struct Model
{
vector<T> verts ;
void transform(Matrix m)
{
for(int i = 0 ; i < verts.size() ; i++)
{
#if response_trait<T>::has_normal==true
puts("Has normal") ;
// will choke compiler if T doesn't have .normal member
printf("normal = %f %f %f\n", verts[i].normal.x, verts[i].normal.y, verts[i].normal.z) ;
#else
puts("Doesn't have normal") ;
printf("pos = %f %f %f\n", verts[i].pos.x, verts[i].pos.y, verts[i].pos.z) ;
#endif
}
}
} ;
int main()
{
Matrix m ;
Model<Vertex> model ;
model.verts.push_back(Vertex()) ;
model.transform(m) ;
Model<VertexN> modelNormal ;
modelNormal.verts.push_back(VertexN()) ;
modelNormal.transform(m) ;
}
क्या आप अपना प्रश्न स्वयं निहित कर सकते हैं और वर्णन कर सकते हैं कि आप क्या हासिल करने की कोशिश कर रहे हैं? –
यह स्वयं निहित है। '# यदि' '' '' 'असामान्य 'सदस्य है, तो' प्रतिक्रिया_trait' 'has_normal' सत्य होना चाहिए, और सही संकलन पथ चुना जाना चाहिए। – bobobobo
जब तक मैंने टाइप गुणों को पूरी तरह गलत समझा नहीं है। जुड़ा हुआ प्रश्न मेरा शुरुआती बिंदु था, लेकिन मुझे नहीं पता कि मैंने इसे गलत तरीके से लिया है या नहीं। – bobobobo