Here\'s what I\'m trying to do:
template struct Model
{
vector vertices ;
#if T has a .normal member
void transform(
I know that it's little late, however...
typedef int Matrix;
struct NormalVertex {
int pos;
int normal;
};
struct Vertex {
int pos;
};
template struct Model
{
typedef int No;
typedef char Yes;
template static decltype (declval().normal, Yes()) has_normal(U a);
static No has_normal(...);
vector vertices ;
template
typename enable_if())) == sizeof(Yes), void>::type
transform( Matrix m )
{
std::cout << "has .normal" << std::endl;
for (auto vertex : vertices)
{
vertex.pos = m * vertex.pos ;
vertex.normal = m * vertex.normal ;
}
}
template
typename enable_if())) == sizeof(No), void>::type
transform( Matrix m )
{
std::cout << "has no .normal" << std::endl;
for (auto vertex : vertices)
{
vertex.pos = m * vertex.pos ;
}
}
} ;
int main()
{
Matrix matrix;
Model normal_model;
Vertex simple_vertex;
Model simple_model;
simple_model.transform(matrix);
normal_model.transform(matrix);
return 0;
}